Może coś takiego może zadziałać:
SELECT *
FROM categories
ORDER BY IF(parent_id, parent_id, category_id), parent_id, display_order
ale ponieważ nie może używać indeksu, będzie działać wolno. (Nie testowałem, może się mylić)
Pierwsze ORDER BY
stan łączy rodziców i dzieci; wtedy drugi zapewnia, że rodzic wyprzedza swoje dzieci; trzecia sortuje dzieci między sobą.
Ponadto będzie to oczywiście działać tylko w przypadku, który bezpośrednio opisałeś, gdy masz dwupoziomową hierarchię.