Heat skillet over medium-high heat, add ground beef and spread in an even layer. Let cook undisturbed for 3-4 minutes, then break up into crumbles and continue cooking until fully browned with no pink remaining, about 6-8 minutes total.
Reduce heat to medium, add diced onion and cook for 3-4 minutes until translucent. Add minced garlic and cook for 1 minute more, stirring constantly to prevent burning.
Add butter to the skillet and let it melt completely. Sprinkle flour evenly over the meat mixture and stir constantly for 2-3 minutes until flour turns slightly golden and smells nutty.
Sprinkle beef bouillon paste, Worcestershire sauce, garlic powder, onion powder, Italian seasoning, black pepper, and salt over the flour-coated meat. Stir together for 30 seconds to distribute seasonings evenly.
Slowly pour in milk while stirring constantly with a whisk, adding gradually to prevent lumps. Once all milk is incorporated, add beef broth in the same gradual manner, whisking continuously.
Bring gravy to a gentle simmer over medium heat, then reduce heat to medium-low. Continue simmering for 8-10 minutes, stirring frequently, until gravy thickens and coats the back of a spoon.
Remove from heat and taste the gravy, adjusting seasonings as needed with additional salt and pepper. The gravy should be thick enough to coat mashed potatoes but still pourable.
Ladle hot gravy over mashed potatoes, biscuits, toast, or noodles. Garnish with fresh chopped parsley if desired and serve immediately.