I am talking from memory of the transition from proto 002 to proto 003 so hopefully I got it right.
If you go on tzscan you will see that there is a counter for addresses
https://tzscan.io/tz1hAYfexyzPGG6RhZZMpDvAHifubsbb6kgn
When this counter is not zero it means the address is « alive » which means in practice that it has a non-zero balance and on practical terms it is taking a non-zero space in the blockchain context.
You can create tons of addresses but as long as they do have 0 balance they do not take any space in the context (and the counter stays at 0). Also if you empty an account there is no longer a storage associated with it and the counter goes back to 0.
Now in order to put balance into an empty address or to bring back the balance of a non-empty account back to 0 costs a fee (since proto 003 and I believe the amount is 0.257xtz).
All in all I would say that bring the balance back to 0 is the closest you can get to « destroy » an address since it does no longer consume any space in the blockchain’s context.
Please note that all of the above applies to implicit addresses (tz...). Originated contracts (KT..) cannot be deleted even with 0 balance (as of proto 003)