Answering the question directly; I don't see that it would be too difficult to optimize an algorithm specifically for x86 hardware; such that an ASIC would simply be x86 with a few instructions removed. The question is whether or not that's useful.
I think having a solution that required several proof of work algorithms, i.e. one is selected somewhat randomly based on the last block might be the way to go.
A general CPU would be good for this task.
yeeep.
i.e its already here -
Quark ( 6 Algos + 3 random functions )
also there is now
M7 (of Bitfreaks mini block-chain)
http://cryptonite.info/wiki/index.php?title=M7_PoW"In order to avoid bias accumulation we multiply the 7 hashes together and then pass that number through the SHA-256 function one last time. The multiplication step is also harder for GPU's and ASIC's but works very efficiently on a CPU."