Current PGP versions and all of GnuPG (GPG) implement the OpenPGP standard. I will only use the term OpenPGP below.
OpenPGP uses both public and symmetric key encryption: When encrypting a document, some random symmetric key gets generated and encrypted using the public key. The receiver will encrypt the symmetric encryption (block cipher) key using his private key. As only the symmetric key get encrypted using the public key, overhead stays small (this is what David Schwartz proposed and already is implemented by OpenPGP).
Of course, there are two cases in which this overhead can get big in comparison to the encrypted data:
- A very little amount of data; if this is a problem, you will have to choose some encryption method with preshared keys (symmetric keys)
- Lots of recipients; as the block cipher must be encrypted for each of them. If this is a problem, you will have to share the secret (private key) between all recipients.
You won't get around using either symmetric encryption and handing over the secret to every single recipient (or do the same with the private OpenPGP key). If you want everybody to have his own secret, nobody else will be able to decrypt his version of the data; so you will have to send everybody another version of this data.