As well, -S<string> only shows patches where the diff changes the number of occurrences of <string>. Thus if a patch both adds and removes <string>, it won't be shown by -S. -G<pattern> will show any patches where <pattern> occurs in the diff at all.
Sorry about that. I just looked for -S as that's all that I ever use for performance reasons, but you are correct as you do mention a diff search example.