Indeed using whole entities to collection with over 500 items is an overkill ;)
First: use pure arrays instead of entities, set 'data_class' => null
in setDefaultOptions
method
Second: You do not want to create over 500 new items on one page form, do You? ;) If it is really needed for some reason and it has to be done like that... well currently $advertiserCampaign = $form->getData();
in Your code will return over 500 objects - HEAVY. Instead of that, $advertiserCampaign = $form->getData();
should return 500 arrays of data and THEN inside foreach You should create new object and bind data to it (e.g. using datatransfomer).
Validation still may be handled with no problem - just set validators for each field inside form class.
Third: I hope that $this->rates
is not another collection of objects - right? In case it is - use primitive array instead of heavy objects.
Fourth: 500 objects/forms on one page? REALLY? Might it be refactored somehow? Maybe pagination and e.g. 20 forms per page? If You really, really need to save 500 objects from one form in one request, then I suggest, to use some Queue handler like RabbitMQ or Gearman to save all 500 objects in database.
I hope that helps somehow.