Zumindest x86 und ARM sind in der Lage, ein Byte in und aus einem 32-Bit-Register zu laden und zu speichern, ohne dass dies Nachteile mit sich bringt, so dass die Verwendung von char wirklich keine Auswirkungen auf die Leistung hat. Ich bin mir nicht ganz sicher, aber ich würde wetten, dass x86-64 auch solche Anweisungen hat. (Natürlich können x86 und x86-64 auch 8-Bit-Werte direkt in Registern verarbeiten).
Die einzige Sorge könnte also die Speicheranordnung sein. Natürlich richtet der Compiler alles aus, so dass die meiste Zeit, Char-Werte in structs aufgefüllt werden, es sei denn, sie sind direkt nebeneinander, dann könnten Sie tatsächlich ein paar Bytes Platz sparen und erhalten eine etwas bessere Cache-Leistung. Wenn Sie riesige Arrays von BOOLs haben und der Speicherbedarf ein Problem ist, sollten Sie sie trotzdem mit Bitpacks versehen.
In jedem Fall ist das kein Thema. Versuchen Sie doch einmal, ein in beide Richtungen kompiliertes Programm laufen zu lassen, um zu sehen, ob es signifikante Auswirkungen auf die Leistung oder die Speichernutzung gibt. Wenn Sie das feststellen, können Sie sich ein Bier kaufen und so tun, als ob es von mir wäre.