The current algorithm for Instr is very inefficient. If you give it a starting position for the search, it doesn't actually start searching at that location. Instead, it searches from the beginning of the string, and each time it finds a match, checks whether that match begins at or after the specified starting point. This makes a search of a long string with high starting position very slow, especially when you're trying to iterate all the instances of the substring, since you have to call it again and again, with it getting slower each time as it gets farther along.
It would be SO EASY to fix this function to just start its search at the specified position.