Comenzaremos creando un procedimiento almacenado, con nuestros parametros de entrada para armar la consulta.

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_consultadinamica`$$

CREATE PROCEDURE `sp_consultadinamica`(
		_tabla VARCHAR(100),
		_campo VARCHAR(100),
		_filtro VARCHAR(100)
    )
BEGIN
		SET @sql = CONCAT('select * from ',_tabla,' where ',_campo,'="',_filtro,'"');
		PREPARE mystatement FROM @sql;
		EXECUTE mystatement;
		DEALLOCATE PREPARE mystatement;
    END$$

DELIMITER ;

lo podemos ejecutar de la siguiente manera.

CALL sp_consultadinamica('producto','nombre','usb')

ahora si queremos que el mismo procedimiento nos sirva para update o delete, podemos enviarle un parámetro más para agregar una condición y según eso nos vaya creando la consulta.

DELIMITER $$

DROP PROCEDURE IF EXISTS `sp_consultadinamica`$$

CREATE PROCEDURE `sp_consultadinamica`(
		_bandera INT,
		_tabla VARCHAR(100),
		_campo VARCHAR(100),
		_filtro VARCHAR(100)
    )
BEGIN
		SET @sql = '';
		
		IF _bandera = 1 THEN
			SET @sql = CONCAT('select * from ',_tabla,' where ',_campo,'="',_filtro,'"');
		END IF;
		IF _bandera = 2 THEN
			SET @sql = CONCAT('update ',_tabla,' estado = "1" where ',_campo,'="',_filtro,'"');
		END IF;
		IF _bandera = 3 THEN
			SET @sql = CONCAT('delete from ',_tabla,' where ',_campo,'="',_filtro,'"');
		END IF;
		PREPARE mystatement FROM @sql;
		EXECUTE mystatement;
		DEALLOCATE PREPARE mystatement;
    END$$

DELIMITER ;

obviamente que la cantidad de parámetros dependerá de cuantos campos vayan a intervenir en nuestra consulta, si esque queremos hacer un INSERT INTO o agregar más filtros al WHERE.