Allow "Advanced" users to define custom fields for tasks and to define who can update their values (security restrictions, similar to the 'update own percentage' permission). Custom fields would be valid across all projects, not per project (otherwise you'll get into trouble trying to show all these with multiple projects on the Gantt chart - not worth the potential complications).
Each custom field would have a field name and a data type. I recommend the following custom-field data types:
- datetime fields (representing a specific point in time)
- duration fields (floating-point field with associated duration units of minutes, hours, days, weeks, months or years)
- text
- number (integer and/or floating-point)
- choice list (the list entries are defined when the field is defined)
Regarding permissions: "Advanced users" (who are allowed to create new projects) should be allowed to create such custom fields, which then are available on all tasks in all projects. Within each project, users with rights to invite new project-users should be allowed to defined whether the project users can update custom fields or merely view them.
Each user who can view the Gantt should have the option of displaying the custom fields as columns on the left (like % complete). It should be possible to filter on these fields (e.g. 'show only tasks); active filters on custom fields would be ANDed with other filters such as the assigned resources.
This would also cover many other feature requests you will get later anyway, e.g. the ability to store Estimated Time and Time Spent for each task - these would just be two custom duration fields; or the ability to create task status categories such as 'paused', 'approved', etc.; or categories indicating which department is responsible for the task.
Custom fields of course need to be imported/exported when the Gantt is imported/exported.