Using HOOK_username_alter() to hide the real username
The $account argument in hook_username_alter() provides the user entity object with all its field values. You can use its field values for your $name substitution. For example:

function MyCustomModule_username_alter(&amp;$name, $account){
  global $user;

  // This example presumes a field_first_name as a user first name field.
  // It will vary based on your field &amp; language environment.
  // use Devel's dpm() to find your actual value for user entity.
  if (isset($account-&gt;field_first_name[LANGUAGE_NONE][0]['value']) 
      &amp;&amp; in_array('venue admin', $user-&gt;roles)) {
    $name = $account-&gt;field_first_name[LANGUAGE_NONE][0]['value'];
  }
}