Disclaimer - mama's answer should work. Halfway through writting an answer I realised I'm wrong, but I still wanna show you what I wanted to suggest. It shows what JWT TokenAuth mutation does and a way to tap into that completely.
- change the inbuild Django authentication like mama's answer suggests
 
- rewrite 
graphql_jwt.decorators.token_auth to look at both fields, not just one 
- write your own class for the TokenMutation that uses this decorator on it's mutate function
 
Something like so (untested):
def two_field_token_auth(f):
    @wraps(f)
    @setup_jwt_cookie
    @csrf_rotation
    @refresh_expiration
    def wrapper(cls, root, info, password, **kwargs):
        context = info.context
        context._jwt_token_auth = True
        username = kwargs.get('username')
        email = kwargs.get('email')
        user = your_auth_method(
            request=context,
            username=username,
            email=email,
            password=password,
        )
        if user is None:
            raise exceptions.JSONWebTokenError(
                _('Please enter valid credentials'),
            )
        if hasattr(context, 'user'):
            context.user = user
        result = f(cls, root, info, **kwargs)
        signals.token_issued.send(sender=cls, request=context, user=user)
        return maybe_thenable((context, user, result), on_token_auth_resolve)
    return wrapper
class TwoFieldJWTMutation(JSONWebTokenMutation):
    @classmethod
    @two_field_token_auth
    def mutate(cls, root, info, **kwargs):
        return cls.resolve(root, info, **kwargs)
All the necessary imports you can find here and here