By nature, rotating an object will change its local axes. If you want a persistent set of "local axes", you can parent the gameobject to another gameobject, which holds the "local axes".
You can rotate around the worldthese axes in a custom order using Transform.RotateAround:
void Update()
{
Transform par = transform.parent.transform;
transform.rotation = Quaternion.Identity;
transform.RotateAround(transform.position, Vector3par.right, rotation.x);
transform.RotateAround(transform.position, Vector3par.up, rotation.y);
transform.RotateAround(transform.position, Vector3par.forward, rotation.z);
}