Since there are not many details about your code quality process, I will focus on your question:
Is it possible to somehow setup rules, to run branch pipeline only for MR and for default branch?
I think job rules may be something like this:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
- if: $CI_COMMIT_BRANCH && $CI_OPEN_MERGE_REQUESTS
when: always
- when: never
This set of rules uses GitLab environment variables like:
Please experiment with them.