Entity Framework — не нужен?
EF вам дает возможность автоматически транслировать экспрешны в диалекты SQL и маппить это на удобные дотнетные сущности. С голым ADO.NET вы будете делать то же самое, но руками.куда логичнее было бы, чтобы в объекте Order было поле типа Client, в котором лежит объект компании-получателя, а не условный int с идентификатором.
Предлагаемая вами схема денормализована, вообще говоря, это не очень хорошо. Но посмотрите на Owned Types для EF Core и на Complex Types для EF6, мне кажется, что это то, что вы хотели бы - "встраивать" один объект в другой, сохраняя всё в единой таблице.Да, EF не то, чтобы позволяет сильно отходить от классической реляционной модели, но с ним можно точечно звать raw sql-queries, что даст больше гибкости там, где это необходимо.
Если по простому то так. Всю грязную работу сделает за вас EF. 
Тут  присутствуют 3 таблицы, контроль целостности и индексы для поиска. 
Что же до ADO или там Daper честно голова болит портянки sql править.  
 Правда это не отменяет возможности пнуть приложение в дальнейшем, создав высокоскоростной адаптер для какой нибудь сущности. using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace HeIsBad.Dbl.Models
{
    /// <summary>
    /// Жалоба
    /// </summary>
    [Table("blames")]
    public class DbBlame
    {
        /// <summary>
        /// Идентификатор
        /// </summary>
        [Key]
        public long Id { get; set; }
        /// <summary>
        /// Жалоба
        /// </summary>
        [Required]
        public string Body { get; set; }
        /// <summary>
        /// Дата создания
        /// </summary>
        public DateTime Created { get; set; }
        /// <summary>
        /// Электронная почта жалобщика
        /// </summary>
        [Required]
        public string Email { get; set; }
        /// <summary>
        /// Причина жалобы
        /// </summary>
        [Required]
        [ForeignKey ("Reason")]  
        public int ReasonId { get; set; }

        
        public virtual DbBlameReason Reason { get; set; }
        /// <summary>
        /// Адрес жалобы
        /// </summary>
        public string BlameUri { get; set; }
        /// <summary>
        /// Кем создано. 
        /// </summary>
        public long? UserId { get; set; }
        
        /// <summary>
        /// Статус жалобы
        /// </summary>
        [ForeignKey ("BlameStatus")]   
        public int StatusId { get; set; }
        public virtual BlameStatus BlameStatus { get; set; }
    }
}