My day dream for fixing Spectre is as follows: Basically double the amount of L1 cache (where the second half doesn't need to be as fast as actual L1 cache), make only the first half usable as cache. When an instruction the CPU speculatively executes an instruction which would replace the content in its L1 cache, first copy the existing content to the second, usually unused, half, and _then_ replace the content of the first half with the new data. Then, if the CPU decides that the branch was correct, just do nothing; if the CPU decides that the branch was incorrect, just copy back the "backup" of the original cache. Copying the cache to and from the "backup" would obviously have to be done really quickly with dedicated hardware, and not be done by going through each byte and copying it, but that should be possible.
Another solution I've thought of, which should probably be easier and/or cheaper: When speculatively executing an instruction, just don't write to cache at all. This would potentially make the speculatively executed instructions slower, but I can't imagine it would have a big effect.
Of course, both of those solutions would just mitigate this specific attack. You're probably exactly correct that timing attacks are going to continue to be a big problem.
Another solution I've thought of, which should probably be easier and/or cheaper: When speculatively executing an instruction, just don't write to cache at all. This would potentially make the speculatively executed instructions slower, but I can't imagine it would have a big effect.
Of course, both of those solutions would just mitigate this specific attack. You're probably exactly correct that timing attacks are going to continue to be a big problem.