I know Physics2D (called Physics2D.net now) very well. We share a lot of stuff as you can see on the
acknowledgment wiki page (Bioslayer).
When it comes to balls-only you can create some very fast algorithms for both determining if they are near each other, especially if they are the same size. I've never seen 7500 geometries being simulated at the same time with real physics. Iterations solvers
like the ones used in both Physics2D.net and Farseer Physics are linearly in complexity. Reducing the accuracy in the solvers does not improve performance a lot. Never aimed to get 7500 balls simulated at the same time, so I'm not sure what exactly has been
done to make it possible.
Do you have a link to the demo with the balls?
As for Farseer Physics, we are very fast but also very inefficient. That might sound crazy but let me explain:
Our algorithms are optimized for speed. Each algorithm is also as simple as they get. We optimize them in terms of garbage generation, data copying (cache coherence) and the like. But, because our algorithms are so simple they can also tend to be inefficient.
There is a lot of places where we could use faster algorithms and a lot of places where we could cache the results for later use (like warmstarting).
So why don't we update all our algorithms to the more efficient ones? well, our aim was a simple and powerful physics engine that anyone could learn and use. I write "was" because we are kinda going away from that aim in Farseer Physics 3.0. In
2.x you could download our source code and use it as a reference in your own project. If you want to build your own physics engine, Farseer Physics is great source of simple code ready to use. 3.0 on the other hand will be a little more complex and will contain
a lot more efficient algorithms.
As said before, the 3.0 version will be based on Box2D and 2.x was based on Box2D Lite. The difference is huge. Box2D is very well optimized (in C++ tho) and has state of the art algorithms to simulate physics (that feels like real physics) while keeping
performance at its highest.
Anyway, back to the topic. The particles you talk about is something I've been wondering a lot about. I eventually came to the conclusion that Particle Systems are not a job for physics engines and that is why I also joined the
Mercury Particle Engine project. Mercury now has a Farseer Physics modifier that makes it possible to integrate physics and particle systems into one system. We could support particles (a
single point) that support colliding with polygons. That is useful for raindrops or other small particles that should react to the environment.