Creo que al final puedes simplificar todo sin usar ENUM, al final eso es mas para valores estáticos que no vas a relacionar.
La mejor opción desde mi punto de vista es crear 3 tablas y luego relacionarlas con querys. (no lo he ejecutado, posiblemente tenga algo mal)
CREATE TABLE gastos (
id BIGINT UNSIGNED AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
category_id BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (category_id) REFERENCES categoria(id)
);
CREATE TABLE categoria (
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);
CREATE TABLE opciones_categoria (
id BIGINT UNSIGNED AUTO_INCREMENT NOT NULL,
category_id BIGINT UNSIGNED NOT NULL,
name VARCHAR(255) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (category_id) REFERENCES categoria(id)
);
Al final solo necesitas relacionar las tablas en la consulta para devolver los datos.
SELECT g.name as gasto, c.name as categoria, oc.name as tipo FROM gastos as g
INNER JOIN categoria as c ON c.id=g.category_id
INNER JOIN opciones_categoria as oc ON oc.category_id=c.id
;
Espero que te sea de ayuda