What is causing this 'narrowing conversion' warning?
That warning message arises when a compiler complies with C/C++ specifications.  

According to ISO/IEC 9899:2011 part 6.5.12.2 (“Bitwise inclusive OR operator”),


  Each of the operands shall have integer type


Thus, in the evaluation of bx_0 | bx_1 within the statement const byte pinMask[3] = {bx_0, bx_1, bx_0 | bx_1};, the operands bx_0 and bx_1 are converted to int type before being OR'd together.  This produces an int result, which then must be narrowed to byte before it can be stored in the  byte array.

Knowing that the (byte) cast is necessary because of C/C++ specifications should convert your view of the cast from “ugly” and “unnecessary” to “necessary” and either “ok” or “oh well”.  :)