Что вы можете сделать, когда вы получите запрос в первый раз, вы можете запустить процесс в другом потоке и вернуть запрос с «флагом начала процесса».
Теперь этот поток выполняет цикл и сохраняет промежуточные результаты в базе данных (может быть во временной таблице).
В то же время ваше представление (я полагаю, JavaScript) начнет выполнять запросы Ajax к этой временной таблице, которые будут давать промежуточные результаты во время работы цикла.
Как только процесс завершится, ajax вернёт 'финиш' и запросы могут остановиться. При этом поток может удалить таблицу и быть остановленным.