I thought it might.
Keep in mind also that it appears you're roughly around the break-even
point between the two implementations. Depending on the actual input
data and how you're using it, the state graph can potentially be much
better than the IndexOf() implementation.
In fact, based on the numbers you posted, I suspect that you're
including the cost of creating the state graph in the total time. For best
results, you would actually just create the state graph once
and then reuse the same graph each time you need to do a search. In
that case, the cost of creating the state graph should not be
included in the performance comparison.
With 359 search strings, the IndexOf() implementation would scan the
input string 359 times as compared to having to scan it only 1 time
for the state graph (in the worst-case scenario, that is: when none
of the search strings are in the input string). Even in the best
case -- when the very first search string is in the input string --
the two would be equivalent. The average case would have the
IndexOf() implementation 180 times slower than the state graph.
In other words, a mere 34% improvement is remarkably tiny given the
actual difference in efficiency of the two algorithms. If you were
to perform the timing test using the same state graph (that is,
creating it only once) on a larger number of iterations, you'd likely
find a difference of 100x or more between the two, with the state
graph winning. And presumably, if performance is actually important
to you, the number of iterations in the real-world situation would be
high enough to realize that kind of performance advantage, assuming
you use the state graph correctly by only creating it once.