Как обработать большое количества данных в Symfony без утечки памяти?
Проверьте, включен ли debug режим, очень похоже на то. Для инсертов я бы на вашем месте транзакцию заюзал на пачки в 1к например. 5кк раз пересчитывать индексы - это очень печально. Если категорий у вас не много - имеет смысл их затащить в память все, а дергать мускуль лишний раз не стоит. Смысла в detach при clear / close нет, от слова совсем.
1. Используйте batch insets,
2. Выгружайте ряды данных как массивы, а не классы моделей, ну и полей Выгружайте ровно сколько надо.