For a decentralized system like Bitcoin, the IO is much more expensive than the CPU. One byte of extra data means transferring to and storing on all nodes. So saving the data storage is very important to Bitcoin.
In the transaction structure of Bitcoin, if removing the public key part in the transaction data, we may save nearly 30% of storage. The cost is we have to check the previous output to check the signature. But still it is worth to do the trim, cause the 30% data saving. (the blockchain data may be decreased from 30GB to 20GB)
Is it possible to do that?
It is technically possible with a fork, but that will cause a much bigger problem.
In current design, a node can forget all spent outputs. Also, a node can forget scriptSig after verification, and store the UTXO only. If a new transaction may refer to the information in the historical blockchain, nodes have to store the whole blockchain forever.
Satoshi has already addressed this problem in the section 7 of his white paper:
https://bitcoin.org/bitcoin.pdf . Please read before you propose a new "solution".
--------------------
Alternatively, it is possible to calculate the public key with only the signature and the signed message. The trade-off is spending more CPU time.
Read more:
https://bitcointalk.org/index.php?topic=6430.0http://www.secg.org/sec1-v2.pdf section 4.1.6
And for full nodes, the storage is much more expensive than CPU.