Попробуйте это:
...
order by firstname is null, firstname
Это работает, потому что в MySQL логические выражения, которые имеют значение true, равны 1
, а false - 0
, поэтому при сортировке все нулевые имена будут последними.
Если вы хотите обрабатывать пробелы как пустые значения, используйте это:
...
order by coalesce(firstname, '') = '', firstname
Или, если имя не является пустым, еще проще:
...
order by firstname = '', firstname