Many of us use a Secret Manager, which moves these out of the Airbyte DB—but keep in mind, every time they're used they have to be decrypted to be sent to the target system, so for that moment in time they'll still exist as such.
But overall this is sort of due to the nature of this type of system; unless the target system supports something like oAuth, it has to have access to the raw secret (and even with oAuth, you're still storing the secrets and such that would be privileged). The expectation is generally not to expose Airbyte to any unauthorized users. They do store secrets in a separate table, but it obviously isn't very hard to join the IDs from the JSON config to get there (but it does mean you could control access to that table differently than others). Sure there are things like pgcrypto you can use for column-level encryption, but you still have to have the key in-system—you can't use hashing since you need to send non-hashed values to the remote systems.
Even with a secrets manager, anyone with access to it can still decrypt the secret—so really the only true protection is the limitation of access to the system and multi-layer security. In our case, none of Airbyte's components are exposed to the web, and the admin UI is locked behind identity-aware proxy (Google IAP, which controls access to only our trusted users). Further, we hide Airbyte in our app altogether and only interface with it via the API.
So I agree that there are options out there, but those are largely supplied by using a secrets manager currently. They could encrypt the values for storage, but since the key is present in system it's not all that much of a protection unless someone got a copy of a database backup without the corresponding application key.