With Gantt, is there a simple way to make TimeItems read-only i.e. a user cant move them?
Yes. each TimeItem has a TimeItemLayout (you may re-use timeItemLayouts to several timeItems). In the TimeItemLayout set these properties:
As you see the granularity to control what a user is allowed to do or not is high.