So etwas könnte vielleicht funktionieren:
SELECT *
FROM categories
ORDER BY IF(parent_id, parent_id, category_id), parent_id, display_order
aber da es keinen Index verwenden kann, wird es langsam sein. (Hab aber nicht getestet, könnte falsch sein)
Das erste ORDER BY
Bedingung sortiert Eltern und Kinder zusammen; dann stellt der zweite sicher, dass der Elternteil seinen Kindern vorangeht; die dritte sortiert die Kinder untereinander.
Außerdem funktioniert es offensichtlich nur in dem von Ihnen direkt beschriebenen Fall, in dem Sie eine zweistufige Hierarchie haben.