Hola stevens82:
Tienes varias formas de resolver tu consulta, la más simple sería utilizar ordenamientos condicionales, es decir CASE-WHEN.
En primer lugar lo que tienes que hacer es AGRUPAR cada título con sus subtitulos... esto podrías hacerlo más o menos así:
Código MySQL:
Ver original+------+----------+-------------+------------+
| id | prent_id | name | item_order |
+------+----------+-------------+------------+
| 1 | 0 | titulo01 | 1 |
| 2 | 0 | titulo02 | 3 |
| 3 | 1 | subtitulo01 | 4 |
| 4 | 0 | titulo03 | 2 |
| 5 | 2 | subtitulo02 | 5 |
+------+----------+-------------+------------+
-> WHERE M2.id
= M1.prent_id
) END grupo
, -> M1.*
+-------+------+----------+-------------+------------+
| grupo | id | prent_id | name | item_order |
+-------+------+----------+-------------+------------+
| 1 | 1 | 0 | titulo01 | 1 |
| 3 | 2 | 0 | titulo02 | 3 |
| 1 | 3 | 1 | subtitulo01 | 4 |
| 2 | 4 | 0 | titulo03 | 2 |
| 3 | 5 | 2 | subtitulo02 | 5 |
+-------+------+----------+-------------+------------+
Esto te dice entonces que el id=1 y el id=3 forman parte de un solo grupo, así como el id=2 y el id=5 forman parte de otro grupo... en el caso del id=4 está solo...
entonces lo único que haces es poner esta condición en el ORDER BY:
Código MySQL:
Ver original -> item_order;
+------+----------+-------------+------------+
| id | prent_id | name | item_order |
+------+----------+-------------+------------+
| 1 | 0 | titulo01 | 1 |
| 3 | 1 | subtitulo01 | 4 |
| 4 | 0 | titulo03 | 2 |
| 2 | 0 | titulo02 | 3 |
| 5 | 2 | subtitulo02 | 5 |
+------+----------+-------------+------------+
Haz la prueba y nos comentas.
Saludos
Leo.