Detta är den enda lösningen jag hittade för att behålla ordningen. Använd ett uttryck även om det fältet finns eller inte. På så sätt är beställningen den du kan förvänta dig:
if (TRUE) {
// To keep the order of the fields we have to use this hacky way.
// Use a function that will not modify the string
$query->addExpression("IFNULL(table_name.field_name, '')", 'field_name_alias');
} else {
$query->addExpression(':field', 'field_name_alias', array(':field' => NULL));
}