I have a list:
List<symbol> table = new List<symbol>();
public class symbol
public byte c;
public ulong low;
public ulong high;
public ulong freq;
sim = table.FirstOrDefault(x => x.c == b); //26 sec
sim = table.Where(i => i.c== b).FirstOrDefault(); //20 sec
sim = table.Find(x => x.c == b); //10 sec
sim = table; //3 sec
List is not designed for efficient searching. If speed is important then you need a better data structure.
If you need to find all symbol with byte value c = x then I would have a dictionary of lists of symbols.
var symbols = new Dictionary<byte, List<Symbol>>();
When you add a symbol you should lookup the list and if not found create a new one