1) Выделять блокировку как высокоприоритетную операцию.
2) Пакет идентификаторов блокируемый карт, разбивать на небольшие блоки. Сжимать (особенно если есть похожие номера) и условно шифровать с проверкой целостности.
3) Преобразовать блоки в человеко-читаемый и, главное, вводимый в терминал, код. Задача - позволить оператору вводить данные вручную с кнопок, блок за блоком, чтобы было понятно, успешно введён блок или нет.
4) Для снижения объёма ввода в каждый из терминалов, сегментировать карты по терминалам (по поставщикам топлива, по районам) если возможно. Так, чтобы количество данных для ввода блокировок было разумным.
5) Реализовать подобное и для ввода новых карт. Но тогда требуется стойкое шифрование, чтобы не могли вскрыть даже за деньги.
6) Предусмотреть возможность ручной выгрузки проблемный карт, для случая ручного ввода - на усмотрение оператора базы, чтобы была возможность в первую очередь блокировать самых ушлых клиентов и наоборот, пополнять баланс самым важным клиентам.
Грубо говоря, можно попробовать максимально оптимизировать обмен, чтобы оператор сервера (или колл-центра сервера?) мог надиктовать точке наборы кодов для ввода в терминал и прямо во время диктовки, по писку терминала, было понятно, что ввод верен/неверен.