I don't think this is very efficient:
Your optimizations targets cases where a single key is used for a lot of data. However uses where the key changes often for a limited encryption/decryption volume suffers from them.
This is the case here: instead of building the tables at object creation, we do it each time the key is set.
Your inlining high optimization suffers from the same symptoms: it recompile the whole code up to eleven times.