Heat the oil in a large skillet over medium heat. Add the onion and sauté, stirring frequently, until softened and translucent, about 3 minutes.
Add the ground beef to the skillet, breaking it up well with a spoon, and cook until the meat has lost its raw color, about 10 minutes, stirring frequently to break up any clumps.
Pour off and discard any juices and fat that have accumulated in the skillet.
Add 2 cups ketchup, the chili powder, garlic powder, pepper flakes, and salt and stir well to mix. Cook, uncovered, until the meat is cooked through and the flavors are blended, about 20 minutes, stirring frequently.
The mixture should be loose, with enough sauce to bind the meat. If it gets too dry, add more ketchup or a bit of water and cover the skillet during the last 5 minutes of cooking.
Stir in a splash of vinegar, then remove the skillet from the heat.
Taste and adjust the seasoning, then spoon onto hamburger buns and serve.