Я бы использовал поле автозаполнения + добавленный серверный кеш для номеров деталей (поэтому вам не нужно будет брать их из базы данных каждый раз, только когда записи были обновлены). Таким образом, он должен работать довольно быстро.
Кэширование в ASP.NET с классом SqlCacheDependency
С помощью этого кода JQuery вы можете фильтровать буквы, которые пользователь вводит в поле «Автозаполнение»:
$(function() {
$.isShiftDown = false;
$('input#partName').keydown(function(e) {
if (e.keyCode == 16) $.isShiftDown = true;
if ($(this).val().length == 0 && (e.keyCode == 188 ||
e.keyCode == 189)) return false;
return ($.inArray(e.keyCode, [8, 13, 35, 36, 37, 39, 46, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 188, 189]) > -1 && !$.isShiftDown)
|| (e.keyCode > 64 && e.keyCode < 91);
}).keyup(function(e) { if (e.keyCode == 16) $.isShiftDown = false; });
});
(замените эти числа на ваши, которые соответствуют разрешенным символам. Например, e.keyCode == 16 - это клавиша SHIFT, 64 - 91 код - это буквы от A до Z)