This is a very interesting question.
There is really no easy way to trace events without any additional code. This doesn't mean that adding the code has to be hard or a performance hog.
If all your events use custom eventArgs you could add a simple logging statement to the constructor that would allow you to count every time that you create one of the custom eventArgs.
If you are not using custom eventArgs you could very easily extend eventArgs with a customEventArgs class that does exactly this counting. Just extend the constructor to update some static variable which you can write out to a log every so often. Then using a quick refactor you could rename all your default eventArgs to this new slightly different customEventArgs. This would take all of 10 minutes and would not break any existing code.
However, if you know that a profiler can do this, why not use it? If the application is this gigantic and you are trying to do very small optimizations whoever you are building this application for would probably not mind the added cost associated with you purchasing a license in exchange for the improvements to their software.