1 confirm transactions aren't affected, since SPV-mining causes empty blocks when they haven't fully validated. The issue is for 2 confirm transactions, where the 2nd block is an empty block.
If the timeout was also block based too, then the fork length could be restricted.
A rule could be added that the (great-)grandparent of the empty block must have been fully validated.
This would mean that 6 confirm transactions are still solid, since they are larger than that maximum fork.
For low confirms, SPV clients could use the timing of the headers. If you receive 2 headers within 60 seconds of each other, then the 2nd header doesn't count as an additional confirm. The confirm count could be min(confirms, (last_confirm_time - first_confirm_time) / 5 mins).
According to reddit, some of the SPV-miners didn't even have the headers they were building on. They were pretending to be hashers and connecting to other pools. When those pools updated their clients, they switched to building on the new block too by extracting the previous pointer for the stratum info send to hashers.
If miners are going to do that, maybe the reference client should be updated to broadcast the headers of new blocks in advance of the block. It may give bad incentives, but it is arguably better than SPV-miners becoming blind-miners.
Blind miners can't do block based timeout properly, since they can't link the headers into a chain. It also leads to pools trying to figure out which of their hashers are actually other pools, and sending then bad work data.