SearchVisitor constructs a new string every call
Every time SearchVisitor is used, it constructs a string as part of calling getRefId().
if (ptr.getCellRef().getRefId() == *mIdToFind)
Because this function is called millions of times, the cost of constructing the string quickly adds up - while profiling loading in OpenMW, I found that over 10% of savegame loading is spent constructing strings in this function.
The easiest solution is adding a function to MWWorld::CellRef, maybe
const std::string* getRefIdPtr() const, which returns a pointer, and then making the above code use that new function.
(The only other significant user of getRefId is readReferenceCollection, which has around 30 thousand calls loading a single save)