Нужны ли воспомогательные таблицы?
Да, желательно.
Это вообще реально, или нужно raw-запросы писать на SQL?
Чтобы было еще быстрее - да. А без дополнительной таблицы - тем более да.
Вот как делать:
https://www.percona.com/blog/2011/02/14/moving-sub...
Ибо я полагаю, что если записей будет over 1M
Индексы решат проблему с миллионом. А еще проблему миллиона решает взгляд на то, что если ты решил "вывести на страницу миллион" - то ты что-то не так обсудил с заказчиком. Человеку от 20 записей уже становится голове тяжело, а лям - это забей.
Есть паттерн Closure Table (я рекомендую его), есть паттерн Nested Sets (для меня тяжелый в чтении, и средний в реализации) и есть паттерн Path Enumeration (самый простой при реализации, и без дополнительной таблицы, но в итоге может не всё) и опирается на WHERE LIKE %path/to/parent%.
Все они реализуют дерево в таблице, позволяя избежать необходимости поддержки рекурсивных запросов, которая в MySQL есть только в более поздних версиях и есть в постгресе. Но честно, я когда разбирался в WITH RECURSIVE понял что с паттернами легче было.