I think you underestimate the resources needed to do this. There is literally not enough energy or matter in the universe to enumerate all the possible wallet private keys. 'rainbow tables' are not useful here (they save you from having to do this impossible task more than once...). You can attack private keys which have not been generated properly, such that there is a sufficiently small number of candidates (broken or malicious RNG usage or deriving the private key directly from a user-created password), but a general brute-force attack on even a random well-created wallet is utterly infeasible.
Now, securing the storage of the private key is a much more difficult problem, and the fact that it is so easy to lose access to your funds (by losing the storage medium it is stored on without having backups) or have them stolen (through phishing, viruses, etc) is a legitimate criticism of bitcoin, at least for the general user who is ill-equipped to deal with a piece of data which is worth so much but both must be secret and cannot be lost.