для серьезности стоит посмотреть сначала суда
http://en.wikipedia.org/wiki/Binary_search_tree
на деле проще всего создать пару <id, object>, составить массив из нее и отсортировать его по возрастанию id, далее делать бинарный поиск по id (не забываем о O(logn), для чего собственно всё это) и получать сразу object, единственное что такую структуру нужно будет изменять при изменении списка
а на самом-то деле c# же написан чтобы не задумываться о такой фигне (кого-собственно должно волновать как массив структур расположен в памяти и что думает об этом кеш процессора), идем в msdn и читаем "Represents a strongly typed list of objects that
can be accessed by index. Provides methods to search, sort, and manipulate lists.", находим метод Find, пишем предикат и всё. Зачем думать о скорости вне real-time программ ?
ps. Серьезно MoKa, почитай вот это
http://www.amazon.com/Algorithms-Str.../dp/0130224189 и не задавай ... гхм ... таких вопросов, это основы нормального программирования (не блиц-стайл), это настолько основы что дальше еще бескрайнее море
ps2. плюс еще рекомендую книгу ответов на все вопросы жизни
http://www.amazon.com/Algorithm-Desi.../dp/0387948600