Have you looked at using System.DirectoryServices against large directories (300,000+ objects)? I just finished up a large project where we migrated the whole AD query classes from S.DS to S.DS.P because of the memory usage and connection issues in S.DS
when you're making lots of connections.
S.DS.P is basically a layer over LDAP, whereas S.DS uses the legacy COM objects, but S.DS.P isn't widely known or used I think. Perhaps because S.DS is so much like the old ADSI.
Anyway, here's a link with more perf data: