Using hook_query_TAG_alter to add 'OR' queries to EntityFieldQuery
Solution to using 'OR' queries with EntityFieldQuery:

The query, note the addTag() and addMetaData():

$query = new EntityFieldQuery();
$query-&gt;propertyOrderBy('created', 'DESC');
$query-&gt;entityCondition('entity_type', 'node')
    -&gt;entityCondition('bundle', 'news')
    -&gt;propertyCondition('status', 1);
if(isset($keywords)){
    $query-&gt;addTag('search');
    $query-&gt;addMetaData('terms', $keywords);
}
$result = $query-&gt;execute();
if(isset($result['node'])){
    $nids = array_keys($result['node']);
} else {
    $nids = array();
}
$news = node_load_multiple($nids);


Then, within a module or something, the hook_query_TAG_alter looks like:

function MODULENAME_query_TAGNAME_alter(QueryAlterableInterface $query){
    $terms = $query-&gt;getMetaData('terms');
    $words = "%".$terms."%";
    $query-&gt;leftJoin('field_data_field_subtitle', 's', 'node.nid = s.entity_id');
    $or = db_or()-&gt;condition('s.field_subtitle_value', $words, 'LIKE')-&gt;condition('title', $words, 'LIKE');
    $query-&gt;leftJoin('field_data_body', 'b', 'node.nid = b.entity_id');
    $or-&gt;condition('b.body_value', $words, 'LIKE');
    $query-&gt;condition($or);
}


Above example shows how to join custom field tables and query them using 'OR' along with title and body fields.