Qualcosa del genere potrebbe forse funzionare:
SELECT *
FROM categories
ORDER BY IF(parent_id, parent_id, category_id), parent_id, display_order
ma poiché non può utilizzare un indice, sarà lento. (Non ho testato però, potrebbe essere sbagliato)
Il primo ORDER BY
la condizione ordina genitori e figli insieme; poi il secondo assicura che il genitore preceda i suoi figli; il terzo ordina i bambini tra di loro.
Inoltre, funzionerà ovviamente solo nel caso che hai descritto direttamente, dove hai una gerarchia a due livelli.