1) Use A* sparingly. AI War gets away with a small pathing map as in-system pathing is strait-line from A to B. The only pathfinding that needs to be done using A* is between-system, which has a cap on the number of nodes (120) which is blazingly fast. Keith might even have dropped A* and instead used precomputed pathing (due to the fact that the walkable map is so small, so the memory overhead is negligible).
2) Lean how to optimize your rendering. The more draw calls you have (look at the profiler) the slower it's going to run. Every iteration of Unity has gotten better in this respect, especially when it comes to particle systems. 3 has the oldest and most intensive, 4 has the newest and fastest. Ideally you should be using a single draw call for ALL your particles.
3) Learn how to optimize physics. Mesh colliders (which are the default for flat planes--no idea why--and imported objects) are very very good for non moving objects. When a mesh collider moves or rotates it needs to be recomputed (no a fast thing to do) as there are no shortcuts the way a cube, sphere, or capsule collider have.
4) Avoid trigonometry. Any floating point call to Math functions is intensive enough to add up for hundreds of objects per frame. Additionally using bitwise operators in large enough numbers has an impact. There was once a discussion on the Logistics station in AI war using +100% / -50% speed modifiers because Keith was using bitwise << and >> to multiply and divide by 2, because any other math function there (even replacing with *2 or /2) would cause noticeable lag.
5) The most generic note: More code does not mean slower code. Learn to use if-shortcuts and use them liberally. Any place you can determine that a complex function does not need to run using a faster method, do it. For example, limiting repath checks to once every 5 or 10 seconds. Players are unlikely to notice zombies pathing the "wrong" way for a short time, and if they do, call it a feature: Zombies are freaking dumb. By reducing the heavy load in this manner more specialized/rarer units can path more often (any more than twice a second isn't going to be noticeable, though, so even here you can save!), giving the illusion that they're more intelligent.