下のような配列とListを用意して

var sourceList = new string[] { "a", "a", "b", "c", "a", "b", "c" };
var outList = new List<string[]>();

sourceList の文字列"a"と"b"だけを
下のような感じでoutList に格納したいです。
{ "a", "a", "b", "a", "b" }

for文で地道に検索すれば実現できるのですが、
配列のデータが大きくなると、
配列のインデックスを0から全て突き合わせるので、
結構遅くなっていきます。

何かスマートなやり方はあるでしょうか?