Конечно же поиск по словарю O(1) будет быстрее, чем линейный поиск O(n). Вот только в этом случае по вашей схеме вам придется держать в памяти сразу и список, и словарь, а также синхронизировать их во время добавления/удаления элементов. На мой взгляд это очень плохая практика программирования.
Я бы сделал что-то из этого:
1) Изначально использовать только словарь (id : Client) вместо списка
2) Если ваш список клиентов отсортирован по id, можно сделать бинарный поиск O(log n)
3) Почему бы для хранения/поиска данных просто не использовать БД?