Heat a large pot or Dutch oven over medium heat, then add the ground beef. Cook, stirring and breaking it up, for 6 to 8 minutes until browned and no longer pink. Drain the excess fat and set the cooked beef aside.
In the same pot, melt 1 tablespoon of butter. Add the diced carrots, celery, onions, dried basil, and dried parsley. Saute for about 10 minutes, stirring occasionally, until the vegetables are softened and fragrant.
Return the cooked ground beef to the pot along with the diced potatoes and chicken broth. Bring the mixture to a boil, then lower the heat and cover the pot with a lid. Allow the soup to simmer for 10 to 12 minutes, or until the potatoes are tender.
While the soup simmers, melt the remaining 3 tablespoons of butter in a small pan over medium-low heat. Stir in the flour and cook for 3 to 5 minutes, whisking constantly until the roux begins to bubble. Gradually incorporate this roux into the soup, stirring as you bring the soup to a boil. Let it cook for 2 minutes to thicken.
Lower the heat and add the cubed Velveeta, whole milk, salt, and black pepper to the soup. Stir until the cheese has fully melted. Remove from heat and gently stir in the sour cream until well combined.
Serve the soup warm, garnished with onion rings, green onions, and crumbled bacon if desired. Enjoy!