Thanks for the suggestions, they are always appreciated. I thought I would add some comments.
 We need to be careful at xTuple to add fields that are specific requirements of a company (or a subset of companies) otherwise there is a risk of overly-complex screens with many screen elements not used by most organizations. There are a couple of ways we attempt to address specific company requirements. First is the concept of Characteristics. These are easily definable custom fields that can be added to most xTuple objects/documents. Second, xTuple is very easy to customize and it would not be a stretch to add a specific field to any screen via the inbuilt scripting mechanism. I have done this many times for different companies.
 I sort of agree with you regarding the Contact emails. The difficulty there was the way these screens worked. However the current concept behind emails works by assuming the email you see in the Contact form (and is stored in
cntct_email) is the active email address. The other emails (stored in
cntcteml table) are considered historic or inactive emails - you only want to email a Contact at one address. There is no UI element to control the
cntcteml_invalid database column so feel free to script a solution around that.
 Contact Phones. Again the UI aspect made it difficult to have active flags in this area. We discussed how to inactivate a phone number without deleting it and our solution was the same as yours - set up an INACTIVE CRM Role. Note changes to Contacts are recorded in Comments so you can trace history as well.
Hope this helps.