It indeed removes the index after an entity is successfully removed. This is easier than potentially updating every element in the index. It's however hurting bulk deletes.
There's also no workaround, all remove calls end up in 1 method which tosses the index out the window, and as it does an indexOf call (which uses the index, or rebuilds it), it's always hitting the bottleneck. The index is actually there to avoid a linear search for the indexof, which is necessary because it has to execute event handlers before the removal, so it has to know whether the entity to remove is in the collection.
It's a tough problem though. At first I thought adding a removerange which doesn't remove the index at first element would work, but that's not true: the index is wrong after the first removal.
It can be done, but it's a bit cumbersome (the index is used for determination whether the element is in the collection. A wrong index will still state whether an element is in the collection (i.e it's in the index) or not.
What version are you using so we know to which version we have to backport the patch which we added to v3.5 for this?