Pesquisa de dicionário (O (1)) vs Linq where

O que é mais rápido e devo sacrificar o padrão Linq para obter velocidade (assumindo que a pesquisa no Dicionário seja realmente mais rápida)? Então deixe-me elaborar:

Eu tenho o seguinte:

List<Product> products = GetProductList();

Preciso procurar um produto com base em algum atributo, por exemplo, o número de série. Eu poderia primeiro criar um dicionário e preenchê-lo da seguinte maneira:

Dictionary<string, Product> dict = new Dictionary<string, Product>();
foreach(Product p in products)
{
    dict.Add(p.serial, p);
}

Quando chegar a hora de encontrar um produto, aproveite o O (1) oferecido pela pesquisa no Dicionário:

string some_serial = ...;
try { Product p = dict[some_serial]; } catch(KeyNotFoundException) { }

Como alternativa, usando o Linq:

Product p = products.Where(p => p.serial.Equals(some_serial)).FirstOrDefault();

A desvantagem da abordagem Dict é, obviamente, que isso requer mais espaço na memória, mais código para escrever, menos elegante etc. (embora a maior parte disso seja discutível). Suponha que isso não seja fator. Devo adotar a primeira abordagem?

Para concluir, gostaria de confirmar se a complexidade da abordagem Linq acima é realmente O (n) e não vejo como ela pode ser melhor que isso.

questionAnswers(1)

yourAnswerToTheQuestion