Avoid Custom Fields Unless Absolutely Necessary
Custom fields... They seem like a great idea upfront, especially to the business people because they avoid defining their forms upfront, and they think it will help them avoid development later on. However, often I've seen much more trouble than benefit in the indiscriminate use of custom fields.
Querying information from custom fields tends to be very slow and more complex, and it becomes immensely challenging to integrate data between modules that have a lot of custom fields because the fields on either end are changing and inconsistent.
Limit custom fields to a minimum. Take the effort to define most of your fields as regular relational columns.
Where you need custom fields, avoid the usual EAV model, and instead prefer JSON-like column types present now in all major RDBMSs (e.g. JSONB in Postgres). JSON-like columns support robust query languages and, often, indexing of the documents and fields, helping with performance and data integrity.