Для в памяти, у вас есть несколько вариантов.
Большинство опций будет O (n). При этом поиск в словаре может приближаться к O (1).
Один из вариантов - хранить своих клиентов в нескольких словарях, каждый из которых имеет ключи, заданные для имени, идентификатора и возраста. Если вы используете одни и те же ссылки на объекты в словарях, вы можете выполнить любой отдельный поиск O (1) без огромных затрат.
Конечно, это становится менее практичным по мере увеличения количества критериев, но с 3 это не так уж и плохо.
Если вы хотите большей гибкости, то подходящим вариантом является база данных. Многие базы данных имеют возможность работать как база данных полностью в памяти, включая SQLite, что позволяет произвольным запросам работать намного быстрее, чем скорость O (n).