Heat olive oil in a large pot or Dutch oven over medium-high heat. Add ground beef and cook, breaking it up with a spoon, until browned. Drain off any excess grease.
Add chopped onion, diced carrots, and diced celery to the pot. Cook until softened, about 5-7 minutes.
Stir in minced garlic and cook for 1 minute more until fragrant.
Sprinkle the flour over the meat and vegetable mixture and stir to coat. Cook for 1-2 minutes, stirring constantly.
Gradually whisk in the beef broth, scraping up any browned bits from the bottom of the pot. Stir in the tomato paste, thyme, rosemary, and Worcestershire sauce. Season with salt and pepper.
Bring the soup to a simmer, then reduce heat to low, cover, and cook for at least 20 minutes, or until the vegetables are tender and the flavors have melded. Stir occasionally.
Stir in the frozen peas during the last 5 minutes of cooking.
While the soup simmers, prepare the mashed potato topping if using: Boil the potatoes until tender. Drain and mash with warm milk, butter, salt, and pepper until smooth.
To serve, ladle the soup into bowls. If using, top with a dollop of mashed potatoes and garnish with fresh parsley.
Notes
This soup is excellent on its own or served with crusty bread. The mashed potato topping adds a decadent touch but is optional.