AVR-GCC for Linux doesn't handle well 16 bit words

I beg to differ, you describe the behaviour for non-volatile variables. Volatile variables are not kept in registers except for the evaluation of a single expression.