When backtracking (heuristic 3a) you keep finding chars in the searchstring until the end. You need a extra check for this:
if (k == 0 && textToSearchIn[u] == patternToSearch[k])
{
if (u + patternToSearch.Length <= textToSearchIn.Length)
list.Add(u);
j += patternToSearch.Length - 1;
}