Heat the oil in a large pot over medium heat (at least 6-quart). Add the onions and cook for approximately 5 minutes until they start to soften, stir frequently.
Add the garlic, cook 1 minute, stirring frequently.
Raise the heat to medium-high. Add the ground beef and stir to combine with the onion-garlic mixture. Arrange the meat in one layer and cook for 3 minutes.
Stir, while breaking up any large pieces with a wooden spoon and cook another 3-5 minutes until the ground beef is browned. Stir occasionally. If there is too much oil in the pot after browning the beef drain some (or all) of it - See Notes.
Lower the heat to medium and add the chili powder, salt, garlic powder, cumin, black pepper and cayenne pepper stir well until combined with the ground beef.
Add the diced tomatoes, beef broth, bay leaf and dried chili peppers (if using) and stir. Raise the heat to high, bring the liquid to a boil (will take about 5-6 minutes).
Then, lower the heat to medium-low, cover and simmer 30 minutes to let the flavors develop and come together, stir occasionally.
Raise the heat to medium, add the red and black beans to the pot, stir. Cook the chili, half-covered, until it starts to simmer. Then, uncover the pot and cook for 45-55 minutes (longer if needed) until it thickens.
Stir occasionally at first. As the chili thickens and reduces, stir more often to prevent sticking on the bottom. Also, keep it at a simmer, lower the heat to medium-low (or further) if it starts boiling too vigorously.
Taste and add salt if needed. As a reference we added ¼ teaspoon to ours.
Serve with your favorite toppings and enjoy!