>>605
プログラミング自体初心者だと思うけど基本的にwhileは使わないほうが良いよ(ちょっとしたミスで無限ループに陥ってフリーズする等バグの温床になる)
あとlist2に入ってるクラスをboolフィールドもう一つ拡張してlist2だけで運用できない?
一応既存の場合ならこういうコードでいい

for (int i = 0; i < list2.Count; i++)  //list2を中心に回す
{
 if (i >= list1.Count) break;  //list1が範囲外になったらforを抜ける
 if (!list1[i] && !list2[i].flag) return i;  //両方falseならインデックスを返す
}
return -1; //全て探し終えてもfalse && falseが見つからなかったらここに到達してreturn -1