The blockchain should have checkpoints every X blocks to limit the time the attacker has to act. Then if you wait 2x blocks you should be pretty safe. Blocks 1 to x are checkpointed by block x+1, which itself will be checkpointed by block 2x+1.
I think the bitcoin client already does this.
There are manual checkpoints hardcoded with each release. I'm proposing a much higher frequency of checkpoints.
If what you mean is that the client will never switch to a different branch, even if longer, if it rejects a block which already has x confirmations, this will lead to situations where a node has checkpointed the wrong version and will never be convinced to switch to the true one. I'll call this approach (which isn't new, of course) "branch cementing".
My own ideas for synchronizable checkpoints - proof of stake via signature blocks - can be found
here. In fact this can work in conjunction with block cementing, since a wrong cement will occasionally be overthrown by a signature block.