Ok, I have a problem with the approach from the word go, and it's this:
"implement "ideal" auditing, where the app itself can recall all versions of the data that were ever entered into it;"
*All* versions? 🙂
You do realize this is physically impossible, yes? The storage requirements for a CRM system are already astronomical, and that's just for the *current* state of the data. Add in a requirement that you keep EVERY SINGLE CHANGE (presumably reversibly) and you've moved from engineering to magic.
Given that, the rest of the approach is seriously suspect.
Unless, of course, I misunderstood "all versions of data ever entered"...