Preheat your oven to 350°F (175°C). Grease a 9x5-inch loaf pan or line a baking sheet with parchment paper.
In a large mixing bowl, combine the ground beef, breadcrumbs, milk, eggs, chopped onion, minced garlic, ketchup, Worcestershire sauce, dried thyme, salt, and black pepper. Mix gently using your hands or a spatula until all ingredients are well incorporated. Avoid overmixing to keep the meatloaf tender.
Transfer the meat mixture to the prepared loaf pan or shape it into a loaf on the baking sheet. Press down gently to remove any air pockets and ensure even cooking.
Place the meatloaf in the preheated oven. Bake for 1 hour, or until the internal temperature reaches 160°F (71°C). If using a baking sheet, you may cover the meatloaf loosely with foil halfway through cooking to prevent it from drying out.
While the meatloaf is baking, melt 2 tablespoons butter in a saucepan over medium heat. Whisk in 2 tablespoons flour and cook for about 2 minutes, stirring constantly to form a smooth roux.
Gradually add the beef broth, whisking continuously to prevent lumps. Stir in 1 teaspoon Worcestershire sauce. Bring the gravy to a simmer and cook until it thickens, about 5-7 minutes. Season with onion powder, garlic powder, salt and pepper. Keep the gravy warm over low heat, stirring occasionally.
Once the meatloaf is cooked, remove it from the oven and let it rest for 10 minutes to retain its juices. Carefully remove the meatloaf from the pan and slice it into even portions. Serve the meatloaf slices topped with the warm gravy over mashed potatoes.