Identifiers and operators do not support the capabilities of prepared queries. These elements must exist in the original query. Imagine if not the following case:
$sql = ":a :b :c :d";
$params = array(':a'=>'SELECT',':b'=>'*',':c'=>'FROM',':d'=>'productos');
$stmt = $this->BD->prepare($sql);
$stmt->execute($params);
Or, already put:
$sql = ":a";
$params = array(':a'=>'SELECT * FROM productos');
$stmt = $this->BD->prepare($sql);
$stmt->execute($params);
As you wish that the order can be modified according to convenience you can make use of the PHP variables so that the original query has its identifiers duly indicated:
$orden = 'titulo';
$sql = "SELECT * FROM productos ORDER BY $orden";
$stmt = $this->BD->prepare($sql);
$stmt->execute();
return $stmt->fetchAll();