Optimizing User Defined Custom Columns
A lot of people want to do what you are describing.  They get into big trouble when the dataset gets big.


  All of the custom fields need to be searchable. 


Only one solution:  MariaDB with "Dynamic Columns".  For discussion of why it is impractical otherwise, and discussion of lesser solutions:
http://mysql.rjweb.org/doc.php/eav


  an auto increment primary key ID along with an app generated uuid key which will be indexed


Once the table (or at least the index) is too big to be cached, UUID/GUIDs lead to lots of random disk I/O and destroy the cache.  Further discussion (and a workaround):  http://mysql.rjweb.org/doc.php/uuid