(модератор) Исходное решение с помощью ЦД, см:viewtopic.php?f=82&t=3770

Изначально я написал процедуру на C#, а затем перевёл на Компонентный Паскаль. Версия на C#:
## Код:
```
public static void MultiFind2 (byte[] s, int begin, int end, int wordCount, byte[][] words, int[] lens, out int word, out int pos)
{
  int w, j;
  word = -1; pos = -1;
  while (begin < end)
  {
    w = 0;
    while (w < wordCount)
    {
      if ((begin + lens[w] <= end) && (s[begin] == words[w][0]))
      {
        j = 1;
        while ((j < lens[w]) && (s[begin + j] == words[w][j]))
        {
          j++;
        }
        if (j == lens[w])
        {
          word = w; pos = begin;
          w = wordCount; begin = end;
        }
      }
      w++;
    }
    begin++;
  }
}
```
Ваш вариант на C# выглядит так:## Код:
```
public static void MultiFind (byte[] s, int beg, int end, int wordCount, byte[][] words, int[] lens, out int word, out int pos)
{
  int i = beg;
  int w = 0;
  int wlen = lens[0];
  int j = 0;
  while (true)
  {
    if ((i + j < end) && (j < wlen) && (s[i + j] == words[w][j]))
    {
      j++;
    }
    else if ((i + j < end) && (j < wlen) && (w < wordCount - 1))
    {
      w++;
      wlen = lens[w];
      j = 0;
    }
    else if ((i + j < end) && (j < wlen))
    {
      i++;
      w = 0;
      wlen = lens[0];
      j = 0;
    }
    else
    {
      break;
    }
  }
  if (j == wlen)
  {
    word = w;
    pos = i;
  }
  else
  {
    word = -1;
    pos = -1;
  }
}
```
Я сравнил производительность C# вариантов на 64 разрядной системе (i7 2600K). Мой вариант быстрее вашего:

Длина текста 100'000'000. Количество слов 10. Быстрее на 52%
Длина текста 10'000'000. Количество слов 100. Быстрее на 52%
Длина текста 1'000'000. Количество слов 1'000. Быстрее на 42%
Длина текста 100'000. Количество слов 10'000. Быстрее на 13%
Длина текста 10'000. Количество слов 100'000. Быстрее на 7%
Длина текста 1'000. Количество слов 1'000'000. Быстрее на 6.9%

Во всех вариантах искомых слов в тексте не было (худший случай).

Мой вариант содержит оптимизацию предполагающую, что искомые слова имеют длину больше либо равную единице.