At a past company, we set up a custom Salesforce object to track lead lifecycle in Salesforce. The object would create a snapshot record every time a lead had a lead status changed. I would recommend something like this before using the campaign object. It obviously depends on how your are using campaigns, but typically each Salesforce object is best served for one type of record tracking (totally just my opinion).
Right now I am using timestamps for MQL/SAL and the measure SAL/SQL differently given there is a transition there to a different kind of Salesforce record (also because there can be multiple contacts on the same opportunity).
I've seen a lot of different approaches to this problem and look forward to seeing other people's take as well.
Thanks! That's a great idea for me to mess around with. I'm struggling to figure out the best way to do it. I'm open to all kinds of different ways to figure this out!