A different way to create coinbase transaction AFAIK when a miner succeeds in creating a block, he puts a special transaction (coinbase) in it which spends no input and sends a fixed amount of BTC to an address he can arbitrarily specify.

Instead of doing so, can we do the following: Miner simply puts an address in the block header. When he succeeds in creating the block, all nodes that receive this block create the coinbase transaction -which spends no input and sends the fixed amount to the address in header- in their UTXO pool. 

Would that work?
Sure, the protocol could have been designed that way.

The benefit would be that a block would be slightly smaller, since it only needs to contain a single address, rather than a full coinbase transaction.

However, a benefit of the current system is that miners have the flexibility to pay out their coinbase transaction in some other way than sending it all to a single address.  For example, a pool can distribute the coinbase transaction directly to its members in proportion to the amount of work they have done.  This removes the need for the pool manager to hold those funds, even temporarily, and gives the members some additional assurance against fraud by the manager.  It also lets miners take advantage of more sophisticated transaction types, such as multisig, segwit, etc.

The current system also means that coinbase transactions are handled the same as other transactions, using the same code; the only difference is that the inputs need not be checked.  Under your proposal, there would need to be special code to create the transaction, which would be another possible source of bugs and increase the "attack surface".

On balance, I think the current way is better.