I think we need BOTH. In my considered opinion Its not a case of one vs the other, but as your attack shows we need to handle the (nearly) full scenario.
Safecoin provides the gradual control that @jlpell suggests is needed, since this (dis)incentives the adding/remove of vault storage according to the storage requirements of the section. But safecoin can only do so much as it is the humans that add/remove the vaults and we do not often act in a sensible manner. So then we need the protocol control to do indirection when needed. For instance the attack is one case when safecoin control system is unlikely to be effective.
The reason I am against the gradual coming into indirection is that it shows a fundamental misunderstanding of what is actually happening and what is being achieved by indirection. Each chunk is an independent item that arrives at the section. If the section has reached a critical limit in its storage then it simply asks other sections to store it. There is absolutely no need to gradually come into the situation. The control system for choosing whether to redirect a chunk is on a chunk by chunk basis and is basically a step function for each chunk anyhow. And adding fuzzy logic is really unnecessary and just complicates things. The section either needs to redirect that chunk or it doesn’t. The vault is filling, it doesn’t help to do one and not the next. Just start doing it when storage has reached a limit point. (was 50% in previous at home vaults).Its not a human interaction thing. Let safecoin handle the gradual bringing online storage before it gets critical.
Whereas the safecoin component is indeed wanting to bring new storage online in a gradual way. If it was a massive increase in price then we humans would bring online large amounts of storage then we get the opposite effect with large amounts brought online, the price then drops and people remove storage quickly and thus massive oscillations as @mav mentions. And could even see too much storage removed. So a controlled (gradual) increase/decrease is needed rather than a step function for this.
So yes gradual increasing of safecoin price as storage is being used up and as it approaches critical the RFC has the price increasing at a faster and faster rate till its around 1 coin per put as avail storage decreases. Then if storage becomes critical (eg attack) then indirection kicks in.
The reason indirection would kick in before 99.9% of storage used up is to allow for vaults to still come and go and for merges etc. I think in the last vault test at home the vault was considered full (for new chunks) at 50%