Posting my thoughts (since you haven't accepted any answer as yet - please consider if you have moved on)
There is no other way than iterating through 'ObservableCollection'. You may find APIs (linq) to do that for you, but in the end it has to iterate through all objects to update their state.
If your collection is updated by other threads then you need to consider thread safety also (it will through exception if other thread updates while you are iterating to update IsFiltered)
Other point is updating a property doesn't reflect in binded UI unless that property raises 'NotifyPropertyChanged' event. So your object should have something like below:
public bool IsFiltered{
get { return _isFiltered; }
set {
if (_isFiltered == value) return; //no need to modify and trigger UI update
_isFiltered = value;
}