I think we should make the CVV as a dynamic number. It could be based on some parameters which could vary every day or month or week or year or for that matter any other parameter which we can think of(ex., usage count of the credit card). The 3 - 6 digit number could be arrived based on some function or formulae which will be shared between the card holder and the bank.
This way, even if the cvv number gets known to the wrong hands, they will be able to make use of it only for limited time.