Personally, I feel that calculating individual pops is the cause of a lot of the problem there. Every single last pop needs to calculate a lot of things, and as a result, every-time a new pop is generated, a lot more calculations need to happen. I feel turning pops into a more abstract thing would work better to calculating them all as individual objects.
Have a planetary population variable that counts how many pops are on a planet. Use the local ethics attraction to divide their ethics; since there are no individual pops, it uses this to set different variables for how many pops in the main count belong to a specific ethic. (Say, the planet has a population of 30, and a 33% spiritualist ethics attraction. It then decides it has 10 spiritualist pops; though there is still no individual pop. Everything would simply be integers that go up slowly, rather than new pops that individually calculate things being generated. A total population per planet, the populations of specific ethics and species, ect. When it comes to empire-wide demography, you just add up these numbers and do some division. (Which I think it already does.)
Basically, make pops be abstract numbers instead of individual entities with their own things to calculate. That's how I think pops should be calculated.