Here's a suggestion that might help Ethereum be even more resilient against FPGAs and ASIC's: evolutionary algorithms.
Basically, instead of one mining function, Ethereum should have 20 or so, and have a separate difficulty for each one. However, after adjusting the difficulties and function for each mining function, Ethereum evaluates each mining function with a model of a computer. This model estimates how efficient a computer with a CPU and/or a GPU would have to be to break even with the mining function, given the current difficulties, and the ones that would require the most efficient computers are booted out and replaced with random functions or mutated copies of the best known functions.
So what does this achieve? This stabilizes the difficulty: With the current planned mining function, if by coincidence the mining function reduces to SHA-3, then all the folks with SHA-3 FPGA's can rush in and create a difficulty spike. However, if a mining function is weak (not exactly SHA-3, but closer than usual to SHA-3) in such a evolutionary multi-function mining scheme, serendipitous miners will identify the weak function and exploit it for all it's worth before it completely blocks up mining for those with general-purpose hardware. And in general, having multiple functions stabilizes difficulty by allowing miners to move to a different function if one function is suddenly difficulty-spiked by some mining optimization.