EntityFieldQuery with Workflow
As described in EntityFieldQuery::propertyCondition(), you can use that method for every database field defined in the hook_schema() implementation for the base database table used from the entity.


  $column: A column defined in the hook_schema() of the base table of the entity.


The code that effectively handle that is in EntityFieldQuery::propertyQuery() which contains the following code.

  $entity_type = $this-&gt;entityConditions['entity_type']['value'];
  $entity_info = entity_get_info($entity_type);
  if (empty($entity_info['base table'])) {
    throw new EntityFieldQueryException(t('Entity %entity has no base table.', array('%entity' =&gt; $entity_type)));
  }
  $base_table = $entity_info['base table'];
  $base_table_schema = drupal_get_schema($base_table);
  $select_query = db_select($base_table);
  $select_query-&gt;addExpression(':entity_type', 'entity_type', array(':entity_type' =&gt; $entity_type));
  // Process the property conditions.
  foreach ($this-&gt;propertyConditions as $property_condition) {
    $this-&gt;addCondition($select_query, $base_table . '.' . $property_condition['column'], $property_condition);
  }


You could implement hook_entity_query_alter(), which is invoked before EntityFieldQuery::propertyQuery() is called, and which (by default) it's the EntityFieldQuery::executeCallback callback, the same callback hook_entity_query_alter() is suggested to change. Using your own callback, you could make a join with the tables the Workflow module is using.