Is it possible to safely implement the Signal Protocol (X3DH) without using XEdDSA
It turns out this is possible and has been implemented in the libolm library of Matrix.

The solution adopted in this library is to generate a signing key for each
user. This is an Ed25519 keypair, which is used to calculate a signature on
an object including both the public Ed25519 signing key and the public
Curve25519 identity key. It is then the public Ed25519 signing key which is
used as the device fingerprint which Alice and Bob verify with each other.
By verifying the signatures on the key object, Alice and Bob then get the same
level of assurance about the ownership of the Curve25519 identity keys as if
they had compared those directly.

Reference: https://gitlab.matrix.org/matrix-org/olm/blob/master/docs/signing.md