Holy crap, I've been looking for something (from a user's perspective) like this for ages. Not doing web stuff anymore so not applying but can't wait to check this out.
BoA has offered this as a feature called "ShopSafe" on their Mastercard since forever, but weirdly it's totally buried and is so neglected that you need to use a Flash app to generate new numbers.