In regular MVC app, the Application_Start method (and others) is not virtual. Therefore, this method must be called through reflection, and there are som naming convention. But why did they choose it like so? Instead, I would rather look at the base class' virtual methods and choose one to override. Now I have to go to docs. Why don't declare even handling methods in the base class.
P.S. In the new ASP.NET Core the Startup class even has no base class.