Попробуйте покопать в сторону:
$em->flush($object);
При реализации одной синхронизации в интернет-магазине, тоже столкнулся, что обновление занимало все больше и больше времени, с каждым следующим товаром.
$em->clear(); не помогало, как я понял при $em->flush(); - доктрина проходится по списку сущностей в памяти, которые в нее загружались и проверяет было ли изменение, так вот проверка - занимала огромное кол-во времени.
Итого при использовании $em->flush($object); - парсинг XML на 4000 товаров и обновление их данных в базе - укладывается в секунд 5-10.
Может поможет)