Estructura tablas de datos SQL

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