Андрей Менский, если бы помещалось, то можно было бы не на каждый запрос, а, допустим, раз в минуту :)
Но раз не помещается, то я других вариантов не вижу. Можно разве что использовать роля данных более низкого разрешения (NumberInt вместо Number для цены), чтобы индекс был поменьше и префиксная компрессия индексов работала лучше.
Из личного опыта не знаю.
IIS (а конкретнее контейнер-application pool) имеет право прибить любой AppDomain, что он с удовольствием делает, если нет запросов в течении определённого времени. ThreadAbortException обычно является индикатором выгрузки AppDomain. Дополнительно на это указывает то, что вызывается Application_End. В статье про выход .NET 4.5.2 (blogs.msdn.com/b/dotnet/archive/2014/05/05/announc... пишут: "...New HostingEnvironment.QueueBackgroundWorkItem method that lets you schedule small background work items. ASP.NET tracks these items and prevents IIS from abruptly terminating the worker process until all background work items have completed. These will enable ASP.NET applications to reliably schedule Async work items.". Подходит это вам или нет, я не могу сказать =)