Dumb CS question here: isn't this a perfect task to use a second CPU on?
Considered this pretty thoroughly during implementation, as, you're right, at first glance it really does look like one.
One problem is it's regularly updating the effects of market conditions, prices, connection weights, etc. It'd have to either make a deep copy of all of the markets (or make access synchronized, which could be troublesome performance-wise - or it might not, but it'd need to be investigated), and the implementation becomes significantly more complex (which isn't a problem by itself, but also makes it more error-prone).
The other problem is being able to save/load while still keeping this task's data around - you need to pause it when saving, collect the data, and then kick it off at the same point after loading. Again, doable, but painful enough and likely enough to introduce bugs that it's not really worth it. I seem to remember there was some non-obvious problem with doing that, but can't remember what it was - I mean, "pause, save data, resume on load" doesn't sound bad at all.
Also, pausing the game becomes iffy because the econ thread would have to get to a point where it can pause as well, right? Which means that pausing the game repeatedly actually speeds up how quickly each iteration of the simulation is computed. Not a problem if it's working with a deep copy (it'll just wait out its allotted time before copying changes over to the "real" data), but potentially weird if it's not.
On the flip side, making a deep copy seems likely to take a bit more time than you can spare in a single frame, mostly for the market connections, it being a fully connected graph. And if you do it over multiple frames, then what you're copying is changing and that's not good either. Might not turn out to be a valid concern, though - needs investigating.
None of this appears unsolvable, and it's definitely something I'll take a look at if performance becomes an issue. But as it stands? It's not using enough cycles to warrant the significant extra complexity it would introduce into the codebase. It's the best candidate out of everything so far for doing on another CPU, though.