В данный момент сделал следующее - поставил консольную команду в Cron и лью json в сущности с Batch Processing. В данный момент на обновление 7к записей ушло 70 секунд.
С многой не стал уже заморачиваться, всё что не лезет в обычные поля запихнул в @ORM\Column(type="json_document", nullable=true, options={"jsonb": true}) (использовал dunglas/doctrine-json-odm).