I think it would work better if assimilation would cause POPs to "blob" and merge with their culturally nearest neighbours, rather than "blob" with the country's primary culture.
Example: Birmingham has the following population distribution:
Code:
250,000 British pops
10,000 Jewish pops
7,000 North German pops
5,000 South German pops
900 Gujarati pops
800 Bengali pops
700 Panjabi
600 Ashanti pops
Right now the assimilation goes like this:
Code:
Jewish --> British
North German --> British
South German --> British
Gujarati --> British
Bengali --> British
Panjabi --> British
Ashanti --> British
with a rate of assimilation that will lead to the small pops vanishing almost instantly, and the others (from my observation) at the same rate. The rate itself depending on policy settings. Pretty soon, the small Indian pops will be gone, even though there were quite a lot of them.
I understand that the game needs to have a way to get rid of small POPs. But why does it have to be such a hamfisted way?? Gujaratis, Bengalis, Ashanti, Jewish all becoming Britons??
It would make more sense if assimilation went to the closest and largest neighbor, with a rate depending on the cultural proximity, like this:
Code:
Jewish --(fast)--> British
North German --(fast)--> British
South German --(very fast)--> North German
Gujarati --(slow)--> British
Bengali --(very fast)--> Gujarati
Panjabi --(very fast)--> Gujarati
Ashanti --(slow)--> British
This could (assuming no pop growth) lead to the following population distribution:
Code:
252,060 British pops
8,000 Jewish pops
12,000 North German pops
2,350 Gujarati pops
590 Ashanti pops
With some more time, the North Germans and Jewish pops would disappear by becoming British, but Gujarati and Ashanti would remain for a longer time, having only slow into the culturally distant British pops.
What's different from the current assimilation mechanic? Instead of making pop assimilation blob everyone into the primary culture, POPs merge into their closest neighbours. This reduces the overall number of POPs, just like the currently implemented solution, but avoids the silly "everyone becomes a Briton" phenomenon.
How is this better than the current solution? First of all, this nerfs countries with large colonial population and progressive governments (UK, USA, potentially also France) by avoiding extreme assimilation. RGO and factory productivity will remain lower, colonies will not become states, recruitment is limited, and so on. Secondly, while it keeps assimilation between close cultures, it retains the flavor of historical plausibility by slowing assimilation between very different cultures. This will make large empires melting pots where you do get "ethnic blobbing" but not into one large culture, rather into a handful of large ethnicities with only a few of them assimilating again into the primary culture of your state.
Isn't this insanely complicated? No. All you need to provide as information to the game is a list that says how close each culture is to every other culture in the game.
Here's how it goes: The number of cultures in the game is, what, 120 or so? So theoretically you would need 120 x 120 = 14400 numbers. But before you say "WTF", realize that these 120 cultures can reasonably be grouped into a much smaller number of clusters: First of all you can put them into at most 30 cultural group such as "Germanic", "American", "Iberian", "Yugoslavian", "Arabic" and so on (you can recycle some of the cultural union tags for this!). These in turn are again classified into maybe seven racial (phenotypical) metagroups: "European (white)", "East Asian", "South Asian", "African", "Amerindian", "Mestizo", "Middle Eastern" without doing anyone serious injustice.
Okay it involves some gross generalizations, f.ex. Patagonians / Inuit / Yakutians being one metagroup, Germans / Italians / Americans / Russians being another, Chinese / Japanese / Korean another and then some murky overlap groups such as African American / Caribbean / Bantu / African minor / ... ("African phenotype metagroup") and Mexican / Venezuelan / Andean / Bolivian minor / ... ("Mestizo phenotype metagroup"). But I think this is okay for a world strategy game, you have to make simplifications somewhere.
So actually you do not specify 14,400 cultural proximity parameters. Rather, you specify assimilation rates between the seven or so metagroups (very slow), An overall assimilation rate within the metagroups and one assimilation rate within one of the cultural unions/groups that we already have in the game. That's only three different rates. You do have to do the work of grouping them, which is a little bit of effort, but that's it. You could "customize" the rates between metagroups if you wish but you don't have to.
The most charming aspect is that the list of cultural proximities would be something loaded at game start. Each pop knows which is the closest pop before a save game is loaded. It is not computed during the game, so it will *NOT* burden the game with laborious computation! All you add is that the assimilation logic needs to check what the largest POP is within a cluster, and have all other pops in the cluster pick this one as their assimilation target.
But the cultural unions were implemented with something totally different in mind! I don't care. I would hijack the concept for this mechanism too. And add a whole more bunch of cultural unions, as well as group many of the existing minor cultures into larger, more artificial groups. Honesty, who the hell cares if the game gets the wrong first and last names for Ashanti and Beninese generals??? They don't need their own cultural groups. This is a game intended to be played as a European Great Power of the 19th century. I don't care about nitpicky cultural differences among people who are totally different from me.
This - is - RACISM!!! 
It recycles the "race" concept but as a tool for stopping nonsensical game mechanisms, not as a tool for slurring or denigrating people. Assimilation can be incredibly fast when you can "pass" as someone else, but it's not reasonable that a society lets you assimilate against racial (phenotypical) stereotypes. Gujaratis in Manchester will not become accepted Britons, **BUT** they can become "British Indian" if this is (artificially) introduced into the game. (Think of "African American", which becomes an accepted culture in the USA after the reconstruction decision.)