こうじゃなきゃダメかw

static IEnumerable<string> AAAToZZZ(int n)
{
  if (n < 0) throw new IndexOutOfRangeException();
  switch (n)
  {
    case 0:
      yield break;

    case 1:
      foreach (var c in AToZ()) yield return c.ToString();
      break;

    default:
      foreach (var c in AToZ())
        foreach (var item in AAAToZZZ(n - 1))
          yield return c + item;
      break;
  }
}