Not necessarily. It depends on the code and optimization. If for example you have successive tests (i.e. nested IFs or complex condition) that use the variables sharing a byte or int some economies are possible.
Suppose you had two booleans sharing a byte:
x bxxxxxxx -- where b is the bit for that boolean and likewise
y xbxxxxxx
With a single fetch from memory (with a LOAD machine instruction) you can put both variables in a CPU register. With a single "AND IMMEDIATE" instruction (with 11000000) you can set the "condition code" for the JUMP instruction that tests the condition. That would be handy if you had
if ( x | y )...
Otherwise, the variables need to be loaded and tested separately requiring a larger number of machine instructions and more execution time.
When these variables are unrelated in the code, then indeed time might be wasted by the need to isolate or extract the needed bits from the cohabitants.
Frankly, this kind of thinking should be a thing of the past except for embedded applications with limited resources, e.g. controlling an electric toothbrush. :)