Btw, your math is off. ⅕, not ¼.
See also here: http://serverfault.com/questions/502305/linux-networking-por...
NAT does tuple mapping - src/dst addr/port and protocol. That is - two TCP mappings can use the same local external port even if they go to the same remote address, for as long as they connect to a different remote port.
My argument still stands in case all peers behind a common NAT router try to access the same IPv4 server (which may just happen with centralized services like youtube/facebook/google). It also stands in case UDP based services are used (stuff depending on a Cone NAT and using STUN like VoIP or online gaming).
Of course, nat has a bunch of other pain in the ass problems, especially in that if I want to be able to track abuse, I've got to log every new connection (flow, whatever) that you make. When I get a complaint, I've got to match that up to my logs, which can be goddamn difficult if the complainer's clock isn't just right.
With static IPs it's way easier to track abuse, and I don't have to actively log what you are doing, just who has what IP when, and because IPs stick around a lot longer than connections, I'm way less vulnerable to clock drift.
Even then, I wouldn't rule out partitioning your big net - there is enough stupid software and OSes around which happily blabber (ie. broadcast) to the attached subnet. Becomes quite a nuisance when you've got hundreds of Nodes.