Simple code that checks if you're old enough to drive
class EfficientCode could be improved by naming the class by the purpose of the code. Otherwise your naming is good.
static int age = 0; should be a local variable in Start()  
Thread.Sleep(8000); // adds a 8 second delay so that the user could first read the introduction shouldn't be needed because you aren't clearing the Console hence the user could still read it.
Instead of try..catch you could take advantage of the int.TryParse() method which returns a bool indicating the success of "converting" the string to an int. If you would use int.TryParse like below you could omit the restarting in case of an error. If the call succeeds age holds the integer.

while(!int.TryParse(Console.ReadLine(), out age))
{
    Console.WriteLine("ERROR: The entered AGE must be a number!");
    Console.WriteLine("Enter your age");
}

ConfirmInformation() is doing a little bit to much. You should split it into 2 methods. One composing the output and one printing the output and asking for confirmation.  

private static string ComposeOutput(String firstName, String middleName, String lastName, int age)
{
    StringBuilder sb = new StringBuilder(100);
    sb.AppendLine("======================================")
      .AppendLine("INFORMATION CHECK:")
      .AppendLine()
      .AppendLine($"FIRST NAME: {firstName}")
      .AppendLine($"MIDDLE NAME: {middleName}")
      .AppendLine($"LAST NAME: {lastName}")
      .AppendLine($"AGE: {age}")
      .AppendLine()
      .AppendLine("Are all those information correct? (Y/N)")
      .AppendLine("======================================");

    return sb.ToString();
}  


This method uses the StringBuilder class. The AppendLine() method is returning the StringBuilder itself hence we can use the method calls fluently. It uses $-string interpolation as well.  

The former ConfirmInformation() method could then look like so  

private static bool ConfirmInformation(string information)
{
    Console.Write(output);

    while (true)
    {
        string input = Console.ReadLine().ToLowerInvariant();
        if (input == "y" || input == "yes")
        {
            return true;
        }
        if (input == "n" || input == "no")
        {
            return false;
        }

        Console.WriteLine("ERROR: Input must be either YES or NO.");
        Console.WriteLine();
        Console.Write(output);
    }
}


I have made a while(true) loop here because your user wouldn't want to restart the whole process if they made a mistake.
As a sidenode, the variable String booleanInput = Console.ReadLine(); is misleading. If Sam the maintainer would read this method the purpose of that variable wouldn't be seen at first glance.