A completely active migration thing for zombies wouldn't be efficient, but a mock up might be interesting.
For instance, random events might make zombies move from one city to the next. These events could only check the region the player is in, so you don't have to check everywhere.
Might have zombie hordes that show up randomly, which would massively increase populations and spawning in that town until a specified time, at which point they're moved to another town. Could generate a list of zombie hordes and assign them a large region (encompassing multiple cities), and set their populations at game start. They could be assigned a starting town at game start and they would move to another adjacent town on a random chance after a certain time period (possibly random, so a horde might stay in place a while or leave shortly after coming to one). The player leaving a certain vicinity would make them go dormant until the player comes back, at which point their movement could be simulated based on how much time passed (small time they're still in the same place, long period might have moved to a city across the other side of their region). If they were activated based on a vicinity of world map tiles with a central point and radius that marks that particular horde's roaming grounds you would only have to track a maximum of 4 hordes at one time, assuming the player was standing right on the corner of all 4 regions - and usually you would only be tracking one.
That way you would have city specific populations, and region specific horde populations that can temporarily invade cities. You could take it a step further and let them populate wilderness areas for a time while they move between the cities, so a player might run into a bunch of zombies in the wilderness between two large cities. Once NPC cities are functioning the hordes could approach them on a random event, and that faction could generate a quest to help them defend the town.