static string[] 製品列名 = new string[] { "製品名", "大部品", "小部品" };

Dictionary<string, string> ToMap(this List<string> row, string[] columnNames) => Enumerable.Range(0, columnNames.Length)
.ToDictionary(i => columnNames[i], i => row[i])

foreach(var 製品 in rows.Select(r => r.ToMap(製品列名))) {
Console.Write(製品["製品名"]);
Console.Write(製品["大部品"]);
}

これでいいよ
ただのテーブル処理なのだから行をいちいちクラスにする必要はない
製品が特有の振る舞いを持ち始めたらクラスにすればいい