This can work well but at some circumstances it can cause issues. If you use interrupts and you also access the same variable for writing a race condition can occur. This is caused because the C language OR instruction in the example above it's actually compiled to three assembler instruction.
If you have this example code in main loop and after the OR instruction the timer or pin change interrupt is fired. Then if you check the same variable in your interrupt routine you don't see yet the bit set in the RAM. This can lead to data race issues. Its better if you google different causes on different platforms.
To prevent this race conditions you have several options.
On AVR you can use SBI and CBI for setting or clearing bit in I/O register. There also instruction SBR and CBR for setting and clearing the registers. But you don't have any atomic instruction for bit access to the internal SRAM. You can solve this on AVR by disabling the interrupts for a while so you can be sure no interrupt is fired in the critical section.
On ARM Cortex M3 M4 and M7 you have option to do a bit-banding. You can write a byte value in the Bit-band memory alias region that will atomically change a single bit in your normal SRAM memory space. Nice explanation with bit-band examples is on the ARM website.
And thats it. More practical examples are in the video on my YouTube channel above.