Sesuatu seperti ini mungkin berhasil:
SELECT *
FROM categories
ORDER BY IF(parent_id, parent_id, category_id), parent_id, display_order
tetapi karena tidak dapat menggunakan indeks, itu akan lambat. (Tidak menguji, mungkin salah)
ORDER BY
pertama kondisi memilah orang tua dan anak bersama-sama; kemudian yang kedua memastikan orang tua mendahului anak-anaknya; yang ketiga memilah anak-anak di antara mereka sendiri.
Selain itu, ini jelas hanya akan berfungsi dalam kasus yang Anda jelaskan secara langsung, di mana Anda memiliki hierarki dua tingkat.