Linq to objects also simply loops over your collections. It's not possible to find elements with an algorithm less than O(n), you always have to look at each element at least once.
You could built it into the schedule create routine however. I.e: add all processed elements to a list, and then traverse that list again to remove the elements from the list to process elements.
This isn't efficient, as it will do a linear search. If you want to do this fast, first store the elements to process in a HashSet<T>, which has ~O(1) (amortized, so give or take) lookup capabilities. Removing the element from the list of elements already processed is very quick.