When I was talking about Dwarf Fortress, I was merely talking about how poorly it preforms as more and more actors are added into it. From what I've seen of how it preforms I would bet it stems from poor memory usage as things expand in 3D arrays. Actors need to be strictly limited to how far around the world they can look, and you may need to do some work with how information is looked up and shared. (ie, plan to allow main roads with path finding nodes to be put in place. Preprocess commonly used paths through your road network. Consider path finding from both ends of a problem with goals of finding paths to central travel networks. If an actor wants Wood then look at main wood sources and see which is closer to an existing road. Only open up roads to new sources when old ones are beginning to deplete, or if an untapped one becomes far 'closer' to get to. Things can become 'closer' because of congestion on roads, or expanding away from an existing source.)

By relying on pre-paths, you can greatly reduce the amount of actual processing done.

Another option is to avoid doing 100% precision simulation, and using a list of action queues. Actor John wants wood, and it is sourced by walking to Road Node A, then to B, C, D. John plans this, stores it in his personal action list. Action Queues can be sorted on the length of time a task will take to complete, and so an Actor will be placed in the Queue that corresponds to how long their next action will take to complete. This way the computer never looks at them again till enough 'ticks' go by for their action to finish.

In the case of John you can either split it up as an entire trip and action, or at way points. I might be tempted to go with checking at each way point, and then flagging the road he is on to account for traffic evenly, rather than having to calculate out when which part of the road is occupied.

A "Personal Action Stack" could be something that has a base case like:
"Calculate Next Action"

When the system pulls an actor off the current tick's Action Queue and sees the "Calculate Next Action" it can run the full AI on it, figure out what it needs, possibly looking at what it has done lately, and pick an action for it:

"Gather wood"

What does he need to do to gather wood? Path to wood source. Then the computer finds a suitable course for him to get to the wood and your "Personal Action Stack" for that actor looks like:
Walk Node A, Walk Node B, Walk Node C, Walk Node D, Gather Wood, Calculate Next Action.

Walk to node A would take 5 Ticks to do, so he is dropped into the Action Queue for 5 Ticks from now. 5 Ticks later it gets back to him, pops "Walk Node A" off his stack, updates his actual position, calculates how long to Walk Node B, and places him in whatever Action Queue for how long it takes.