Edição: Se você estiver usando apenas um List<>e você só precisa do índice, então List.FindIndexé realmente a melhor abordagem. Deixarei esta resposta aqui para aqueles que precisam de algo diferente (por exemplo, além de qualquer um IEnumerable<>).
Use a sobrecarga Selectque requer um índice no predicado, para transformar sua lista em um par (índice, valor):
var pair = myList.Select((Value, Index) => new { Value, Index })
.Single(p => p.Value.Prop == oProp);
Então:
Console.WriteLine("Index:{0}; Value: {1}", pair.Index, pair.Value);
Ou, se você deseja apenas o índice e o usa em vários lugares, pode escrever facilmente seu próprio método de extensão Where, mas, em vez de retornar os itens originais, ele retornou os índices dos itens correspondentes ao predicado.
int index?