Not everything goes to BIP. This is a purely internal function of the reference client. Most discussion of changes like this actually happen on github, attached to the pull request that implements them.
I think the headers first change is a key stepping stone for this.
Downloading 300k blocks is around a 20MB download.
With modern bandwidth, nodes could download that from 8 peers reasonably quickly and then discard any chain that doesn't have sufficient POW.
The more blocks in a blockchain, the higher the total POW. It would be cool if someone could work out a formula.
Max blocks = f(time since genesis, POW)