1.- Si es posible hacerlo, pero tendrías que implementar toda la lógica para trabajar sobre las funciones de MySQL por decir:
Código PHP:
class DB {
private $connection = null;
private static $instance = null;
private function __construct() {
$config = Config::getInstance();
$this->connection = mysql_connect( $config->get( 'db' ), $config->get('user'), $config->get( 'pass' ) );
}
public static function getInstance() {
if( self::$instance == null ) {
self::$instance = new self();
}
return self::$instance;
}
public function __destruct() {
mysql_close( $this->connection );
}
}
2.- Si esa estructura te sirve para tu aplicación no veo porque no la debas de usar, no hay una "regla" mas que la separación de capas.
3.- Recuerda que el controlador es la unión de la información, así que no hay ningún problema en llamar a diferentes modelos para tener toda la información lista.
4.- Debes de crear un modelo por cada entidad de datos requieras, y puedes tener un solo controlador, pero es mas limpio si separas cada controlador en su caso especifico de uso.
Saludos.