лень писать под конец дня..
при твой структуре хороший вариант - написать cron который будет делать денормализацию. например, хранить ID потомков узла и/или всех потомков узла. таким образом, сокращается кол-во sql запросов и остается будет только рекурсивно пробежать по массиву данных и отсортировать дерево.
т.е. у категории 1 потомки 2,3,4,5,6,7,8,9,10,11
у категории 2 потомки 5,6,7,89,10,11
у категории 5 потомки 7,89,10,11
и т.д.
и что бы получить потомков узла 1 достаточно написать select * from t where id in (2,3,4,5,6,7,8,9,10,11)
а далее - сортировка на уровне php