Esses dias encontrei uma consulta com uma penca de JOINs e precisava ordená-la por nome - no entanto, haviam duas colunas que representavam nome (pc.company_name, pi.fullname). Para cada linha, uma dessas colunas seria nula, então seria preciso estabelecer uma condição na cláusula ORDER BY.
Difícil? Não, extremamente fácil.
SELECT *
FROM `table`
ORDER BY
CASE
WHEN 'condição' THEN 'coluna'
WHEN 'condição' THEN 'coluna'
END 'direção'
A consulta final ficou, de forma simplificada, assim:
SELECT *
FROM `table`
ORDER BY
CASE
WHEN `pi`.`fullname` IS NOT NULL THEN `pi`.`fullname`
WHEN `pc`.`company_name` IS NOT NULL THEN `pc`.`company_name`
END ASC