Yes, you can retrieve those with just one SQL query like this:
var translationsDictionary = ResourceStringInfoProvider.GetResourceStrings()
.Source(resourceString => resourceString
.Join<ResourceTranslationInfo>("CMS_ResourceString.StringID", "CMS_ResourceTranslation.TranslationStringID")
.Join<CultureInfo>("CMS_ResourceTranslation.TranslationCultureID", "CMS_Culture.CultureID"))
.WhereEquals("CMS_Culture.CultureCode", "en-US") // use your culture code
.WhereStartsWith("CMS_ResourceString.StringKey", "custom.") // all strings starting with "custom.*"
.Columns("StringKey, TranslationText")
.ToDictionary(k => k.GetStringValue("StringKey", String.Empty),
v => v.GetStringValue("TranslationText", String.Empty));
You can read more about joining tables here. Also, I recommend caching this data with cache dependencies to "cms.resourcestring|all" and "cms.resourcetranslation|all".