Como você mesmo mencionou, uma possível solução é fazer o processamento de forma assíncrona. Você pode criar um job que processa apenas uma linha do csv, e jogar esses jobs numa fila para serem executados um a um, em vez de tentar processar o csv inteiro na mesma requisição por exemplo.
Eu tive um problema parecido um tempo atrás mas era com exportação, fiz um post aqui sobre a solução que apliquei, acho que pode te dar um norte.
Link do post: https://www.tabnews.com.br/tiagopaes/melhorando-a-eficiencia-com-processamento-assincrono-em-filas