CPU is always running at 100% capacity if it's running at all. In some cases it may be shut down to save power.
Modern operating systems have things like task schedulers which rotate programs which are executing on the CPU so some percent of the time CPU may not be doing any productive work (for example executing NOPs, jumping in place or whatever the system idle process does). So what task manager shows when showing you the CPU load is actually the percentage of time during which the system idle process is not executing. That is completely normal because some processes simply have no need for extra CPU time as they could be waiting for something else.
On older operating systems, like various versions of DOS, there is only one process running at a time and we don't have "task manager" because there's no need for it since you can run only one program at a time*. Even when you think that you're not running any program, you're running OS shell which is actually taking up all CPU resources available. In practice this does not lead to higher CPU temperatures. To put it simply different instructions use different parts of the CPU and instructions used for waiting for input don't heat up the CPU much.
As for lack of optimization, well that's a really big topic which mainly depends of what you consider as optimal. As I said, the CPU is always under load and it can't work on say 50% power (if you for example lower the frequency, it's still running at 100% but now each instruction takes longer). In some cases it is a requirement for computer to focus only on one single program and in that case if your CPU is executing something else, it's wasting time. If you want illusion of having 50 different programs running at the same time, then you cold say that the CPU usage is suboptimal. Do keep in mind that the task switching itself which happens in modern operating systems is taking some CPU resources and back when DOS was new, you simply didn't have enough resources for multiple programs (and the task scheduler) to be running on a home computer at the same time.
*Yes, there were things like terminate and stay resident programs, but they weren't real multi-program experience. Of course there are thing like interrupt handlers which change what is executing on the CPU, but since they don't have their own stack, I wouldn't call them real processes.