Вам нужно перебирать все варианты заполнения ряда, поэтому рекурсия неизбежна.
Причём лютая, поскольку каждый сегмент пораждает 2 шаблона следующего ряда.
Подозреваю, что оно слегка устарело за эти годы.
Индексирование переделывали в нескольких последних версиях.
В частности, в последней версии 2.6 добавлено "пересечение" индексов по отдельным полям, вместо использование составного. Но не уверен, что применимо к сортировке.
Поглядите в свежей онлайн документации.