При первом проходе всех циклов по одному разу, составить карту вложенности строк и, после выхода (break) из последнего цикла, использовать рекурсивную конкатенацию сразу целыми строками.
Фактически, это превращение вертикального шардирования в горизонтальное: уменьшаем время работы кода, но увеличиваем используемый объём оперативной памяти.