Возможно, стоит задуматься над MPTT (
django-mptt). Нативно, без костылей, без рекурсий, самые быстрые запросы на чтение, поддерево с 12 уровнями и 4 сыновьями у каждого внутреннего узла получается одним запросом (вместо 5.5 млн запросов).
Из минусов - долго на запись.