For a long time now several banks (I'm talking EU here, I never saw this in the US, but that doesn't mean they don't have it) offer services where you can generate a temporary card number for a one-time single transaction, and the generated number becomes invalid after that single transaction. It's meant for online payments - you generate the number with a specified sum that can be spent, you make the transaction after which the number disappears. This, combined with a two-layer online banking login (password + single-use token sent by text to your phone) seems pretty solid to me. At least, I never heard anyone using it having their card data stolen.