Should we be using readonly fields
In the words of Jon Skeet, the highest rated SO poster, and from the post you linked
This isn’t an optimization I’d recommend in general. Most code really doesn’t need to be micro-optimized this hard...
And Jon said, let there be readonly fields.
is there an alternative that allows us to achieve the same results without losing efficiency in runtime?
Although this isn't the same as a readonly field, another similar option is to use a property with only a get accessor, and no set accessor. This will NOT allow you to set a value during construction (like you can with a readonly field) but the value still cannot be modified after that. If setting the property internally to the class is acceptable, then you can also have a private set accessor.