Статья Скотта Гатри хороша, но мне любопытно, почему вы решили сделать это через Global.asax вместо того, чтобы использовать HttpModule, как он предлагает. Кроме того, жизненный цикл страницы Asp.Net в любом случае проходит через каждое из этих событий в Global.asax.
События HttpModule запускают каждый запрос, и, если вы не делаете ничего сумасшедшего в своей логике, тогда вам следует идти вперед. Даже поиск в базе данных в методе Application_BeginRequest может быть уменьшен путем правильного кэширования.
А если есть сомнения, запишите некоторую информацию в Trace , чтобы точно узнать, сколько времени занимает ваша рутина. Я думаю, вы найдете, что по сравнению с вашими самыми дорогими операциями (поиск в базе данных) время будет незначительным.