Nested OR clause with EntityFieldQuery
I had to do a query like that once, here is how I achieve this with EFQ:

$matches = array();
yourmodule_mini_query('12-DEC-14', $matches);
yourmodule_mini_query('null', $matches);

function yourmodule_mini_query($value, &amp;$matches) {
  $entityQuery = new EntityFieldQuery();
  $query = $entityQuery-&gt;entityCondition('entity_type', 'product');
  $query-&gt;fieldCondition('product_expiry_date', 'value', $value, '=');
  $query-&gt;fieldCondition('availability', 'value', 'Yes', '=');
  $results = $query-&gt;execute();

  if(count($results)) {
    foreach ($results['product'] as $p) {
      // By using product_id as array key, you deal with the duplicates
      $matches[$p-&gt;product_id] = $p-&gt;product_id;
    }
  }
}


Where $matches contains an array of product_id's that are available and for which product_expiry_date is null OR 12-DEC-14.

Hope it helped.

EDIT: As said in the comments below, the evaluation of the NULL value may require a second distinct query instead of calling twice the same function.