Heat the oil in a large Dutch oven over medium heat until it is shimmering. Add the onions, bell pepper, chili powder, cumin, cayenne and ½ teaspoon of the salt. Cook until the vegetables have softened, about 7 minutes. Stir in the garlic and cook for another 30 seconds.
Add the beef and increase the heat to medium-high. Cook, breaking up the beef with a wooden spoon, until no longer pink, about 10 minutes. Stir in the beans, diced tomatoes (with their juice), tomato puree and the remaining ½ teaspoon salt. Bring to a simmer, then reduce the heat so it maintains a slow simmer, cover and cook for 45 minutes.
Remove the lid and continue to simmer for an additional 45 minutes. Season with additional salt and pepper to taste before serving. Garnish with shredded cheddar cheese and sour cream, if desired. Leftover chili can be stored in an airtight container in the refrigerator for up to 4 days. The chili can also be frozen for up to 1 month (let the chili thaw in refrigerator for 24 hours before reheating).
To make in the slow cooker, prepare through step #2 up until simmering, then transfer to a slow cooker and cook on low for 6 to 8 hours or on high for 3 to 4 hours. Leave the lid ajar and cook on high for the final hour of cooking to allow the chili to thicken.