How long has it taken for BIP-Taproot to go from draft specification to activation? It seems BIP-Taproot has been discussed for years now. How long has it taken to go from draft specification to potential activation?
The idea of using the leaves of a Merkle tree to store alternative Bitcoin scripts dates back to Russell O'Connor in 2012. The idea of using Schnorr signatures instead of ECDSA has been discussed for at least as long. So you could say that what we will collectively call BIP-Taproot (BIP 340, BIP 341 and BIP 342) has been in the making for over eight years at this point.
However, there have been different iterations of how to apply these ideas and what we now consider BIP-Taproot was first proposed on the Bitcoin dev mailing list by Greg Maxwell in January 2018.
The draft of the Schnorr BIP (what became BIP 340) was first sent to the Bitcoin dev mailing list in July 2018.
The draft of the Taproot BIP and the Tapscript BIP (what became BIP 341 and BIP 342) were sent to the Bitcoin dev mailing list in May 2019. The BIPs were all allocated BIP numbers in January 2020.
Jonas Nick laid out the full timeline of BIP-Taproot progress here.
Greg Maxwell compared how long it took SegWit to go from draft specification to merged into Bitcoin Core in this Reddit post.

Segwit went from early public discussions to merged in six months. So in spite being more complex and subject to more debate due to splashback from blocksize drama, segwit was still done in significantly less time already.
Taproot has also been exceptionally widely discussed by the wider bitcoin community for a couple years now. It's application is narrow, users who don't care to use it are ultimately unaffected by it (it should decrease resource consumption by nodes, rather than increase it) and no one is forced to use it for their own coins. It also introduces new tools to make other future improvements simpler, safer (particularly, taproot leaf versions), and more private... so there is a good reason that other future improvements are waiting on tapoot.